博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
quick sort
阅读量:5157 次
发布时间:2019-06-13

本文共 3269 字,大约阅读时间需要 10 分钟。

快速排序(Quicksort),又称划分交换排序(partition-exchange sort),是对冒泡排序算法的改进,最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 

快速排序也是被称作21世纪最伟大算法之一。

http://developer.51cto.com/art/201403/430986.htm

 

void quickSort(int arr[], int left, int right) {      int i = left, j = right;      int tmp;      int pivot = arr[(left + right) / 2]; // 选取哪个元素作为枢轴并无要求.也可以用第一个元素       /* partition */      while (i <= j) {            while (arr[i] < pivot)                  i++;            while (arr[j] > pivot)                  j--;            if (i <= j) {                  tmp = arr[i];                  arr[i] = arr[j];                  arr[j] = tmp;                  i++;                  j--;            }      };       /* recursion */      if (left < j)            quickSort(arr, left, j);      if (i < right)            quickSort(arr, i, right);}

 

 

 

#include 
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left,int right) { int i,j,t,temp; if(left>right) return; temp=a[left]; //temp中存的就是基准数 i=left; j=right; while(i!=j) { //顺序很重要,要先从右边开始找 while(a[j]>=temp && i

 

void quick_sort(int *a, int left, int right){    if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/    {        return ;    }    int i = left;    int j = right;    int key = a[left];    while(i < j)                               /*控制在当组内寻找一遍*/    {        while(i < j && key <= a[j])            /*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升        序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/        {            j--;/*向前寻找*/        }        a[i] = a[j];        /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是        a[left],那么就是给key)*/        while(i < j && key >= a[i])            /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,        因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/        {            i++;        }        a[j] = a[i];    }    a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/    quick_sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/    quick_sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/    /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/}

 

 

 

/*! * Description: * author scictor 
* date 2018/7/22 */int partition ( int array[], int min, int max){ // define a pivot as the max item of the (sub)array int pivot = array[max] ; int i = min - 1 ; // loop through the elements of the (sub)array for ( int j = min ; j < max ; j ++ ) { // in case the element has a smaller value that the pivot // bring it in front of it (larger elements will come after it) if (array[j] <= pivot) { i ++ ; int temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } // bring the pivot to its correct position int temp = array[i + 1] ; array[i + 1] = array[max] ; array[max] = temp ; return i + 1 ;}void quickSort ( int array[], int min, int max){ if (min < max) { // partition the array in two parts int q = partition(array, min, max) ; // apply QuickSort recursively to both parts quickSort(array, min, q - 1) ; quickSort(array, q + 1, max) ; }}

 

转载于:https://www.cnblogs.com/guxuanqing/p/9351565.html

你可能感兴趣的文章
Javascript学习历程之事件
查看>>
.NET Remoting 入门实例
查看>>
Git配置安装使用教程操作github上传克隆数据
查看>>
Django的路由层
查看>>
Python笔记——break的注意事项
查看>>
css hack的使用
查看>>
最小生成树,回忆复习篇。
查看>>
HTML 去调table表单里面td之间的间距
查看>>
实体框架(Entity Framework)简介
查看>>
自定义导航栏内容
查看>>
记录Yii2代码调试中出现的两个问题(截图展示)
查看>>
字符串常用操作
查看>>
fiddler模拟低速网络
查看>>
Grafana展示DNS解析延时
查看>>
如何在Android 4.0 ICS中禁用StatusBar | SystemBar | 状态栏 【完美版】
查看>>
查看tomcat启动文件都干点啥---server对象
查看>>
Javascript 运行上下文和作用域链
查看>>
小学生四则运算
查看>>
debian+apache+acme_tiny+lets-encrypt配置笔记
查看>>
0113——代理模式
查看>>