您的位置:首页 > 其它

排序之快速排序

2013-11-12 19:25 38 查看
快速排序是对冒泡排序的一种改进。基本思想是每次排序将序列分为两部分,每一部分的数据都比另一部分的数据要小,即取序列中的某个值为中间值,第一个子序列中每一个数据的值都比这个中间值小,第二个序列中每一个数据的值都比这个中间值大。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

时间复杂度:平均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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序 算法 ACM