首页 > 代码库 > 快速排序法
快速排序法
这个排序方法的时间复杂度为O(nlogn),最坏时间复杂度为O(n^2),所以说是属于所有排序方法中比较高效率的一种了。
这种排序方法的基本思想是:
先找到一个区间中的一个基准点,然后找到这个区间右边所有小于这个基准点的元素都放到基准点左边,还有这个区间左边所有左边大于这个基准点的元素都放到基准点右边。用递归思想,将区间化小,一直小到只有一个元素即排序完成。
百度百科这么说的:快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
该思想的实现代码写出来可能不一样,但是思想大概就是这个思想。
下面是我搜集到的一个人写的快速排序的代码:
1 void partition(int a[], int start,int end) 2 { 3 if(start>=end) 4 return; 5 6 int low = start; 7 int heigh = end; 8 int index = a[low]; // 基准点选在区间开头的元素 9 10 while(low<heigh) 11 { 12 while(a[heigh]>index&&low<heigh) // 从区间右侧开始,找到比基准点index小的元素就放到区间左边 13 { 14 heigh--; 15 } 16 if(low<heigh) 17 { 18 a[low++] = a[heigh]; 19 } 20 while(a[low]<index&&low<heigh) // 从区间左边开始,找到比基准点index大的元素就放到区间右边 21 { 22 low++; 23 } 24 if(low<heigh) 25 { 26 a[heigh--] = a[low]; 27 } 28 } 29 30 a[low] = index; // 把基准点放到区间中间 31 partition(a,start,low-1); // 把基准点左侧的区间进行整理----递归 32 partition(a,low+1,end); // 把基准点右侧的区间进行整理----递归 33 }
下面是调用示例:
int a[] = {1,3,5,4,3,0,8,6}; partition(a,0,7);
运行结果:
参考文章:
- http://www.cnblogs.com/surgewong/p/3381438.html
- http://baike.baidu.com/link?url=GDBGdDYxqZmDS.....
- http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html
快速排序法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。