排序之快速排序
2013-11-12 19:25
38 查看
快速排序是对冒泡排序的一种改进。基本思想是每次排序将序列分为两部分,每一部分的数据都比另一部分的数据要小,即取序列中的某个值为中间值,第一个子序列中每一个数据的值都比这个中间值小,第二个序列中每一个数据的值都比这个中间值大。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
时间复杂度:平均O(nlogn) 。最坏情况O(n^2) 。
需要注意的是快速排序是一个不稳定的排序方法,但在大多数情况下时间复杂度是十分理想的。当出现多个重复值,或给定序列是有序的时候,时间复杂度是趋近于n^2。
代码参考:
时间复杂度:平均O(nlogn) 。最坏情况O(n^2) 。
需要注意的是快速排序是一个不稳定的排序方法,但在大多数情况下时间复杂度是十分理想的。当出现多个重复值,或给定序列是有序的时候,时间复杂度是趋近于n^2。
代码参考:
#include<iostream> using namespace std; int a[1000000]; void qs(int l,int r) { int i=l,j=r,x=a[(l+r)/2]; do { while (a[i]>x) i++; while (a[j]<x) j--; if (i<=j) { int y=a[i]; a[i]=a[j]; a[j]=y; i++;j--; } }while (i<=j); if (l<j) qs(l,j); if (i<r) qs(i,r); } int main() { int n; cin>>n; for (int i=1;i<=n;i++) cin>>a[i]; qs(1,n); for (int i=1;i<=n;i++) cout<<a[i]<<endl; }
相关文章推荐
- 快速排序
- 动易2006序列号破解算法公布
- C#数据结构与算法揭秘二
- 浅析STL中的常用算法
- JavaScript 组件之旅(二)编码实现和算法
- 深入单链表的快速排序详解
- php排序算法(冒泡排序,快速排序)
- JavaScript实现快速排序(自已编写)
- 将15位身份证补全为18位身份证的算法示例详解
- C++算法系列之日历生成的算法代码
- 简单的四则运算
- 数的奇偶性
- 1 2 3 4 5 6 7 8 9 = 110的java实现
- Sedgewick之巨著《算法》,与高德纳TAOCP一脉相承
- 【代码】Pythonの代码片段
- STL中算法
- 数据结构&算法学习
- 算法的时间复杂度
- 算法导论:选择排序的原理与实现
- PHP实现四种常用的排序算法