您的位置:首页 > 其它

排序方法汇总(二)快速排序

2016-08-31 21:12 225 查看
快速排序使用了分治思想,分解为求 a(p..q-1)<a[q]<a(q+1) 的问题 + 分别递归a(p..q-1),a(q+1).

#include <iostream>
using std::cout;

// a[p..q-1]<a[q]<a[q+1..r]的形式
int partition(int *a,int p,int r)
{
//选a[r]为主元
int x=a[r];
int i=p-1,temp;
for(int j=p;j<=r-1;j++)
{
//若a[j]小于主元,提到前面
if(a[j]<x)
{
i++;
if(i!=j)
{temp=a[i];a[i]=a[j];a[j]=temp;}
}
}
//将主元放到小的和大的中间,返回主元位置
if(r!=i+1)
{temp=a[r];a[r]=a[i+1];a[i+1]=temp;}
return i+1;
}
void quicksort(int *a,int p,int r)
{
if(p<r)
{
//处理成 a[p..q-1]<a[q]<a[q+1..r]的形式
int q=partition(a,p,r);
//递归处理a[p..q-1],a[q+1..r]
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}

int main()
{
int a[]={1,45,3,24,0,45};
for(int i=0;i<6;i++)cout<<a[i]<<"  ";
cout<<"\n";
quicksort(a,0,5);
for(int i=0;i<6;i++)cout<<a[i]<<"  ";
cout<<"\n";
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: