您的位置:首页 > 其它

算法导论之快速排序

2017-05-28 19:21 330 查看
#include <iostream>
using namespace std;
int PARTITION  ( int *A,int p, int r)
{
int x =A[r];
int i=p-1,a;
for(int j=p;j<r;j++)
{
if(A[j]<=x)
{
i++;
a=A[i];
A[i]=A[j];
A[j]=a;
}
}
a=A[i+1];
A[i+1]=A[r];
A[r]=a;
return i+1;
}
void QUICKSORT(int * A,int p,int r)
{
if(p<r)
{
int  q=PARTITION(A,p,r);
QUICKSORT(A,p,q-1);
QUICKSORT(A,q+1,r);
}
}
int main()
{
int A[]={16,32 ,5, 13,9,12,1,2,11,0};
QUICKSORT(A,0,10);
for(int i=0;i<10;i++)
cout<<"  "<<A[i];

}

快速排序的i一开始指向p-1,j指向的位置表示在j之前的位置与所选pivot关系已知,在j之后的元素位置未知。

之后j自增,碰到比pivot大的元素不动作。i的作用是i左边的都是比pivot小的,i指向的位置的之前元素必然比pivot小。所以当j遇到比pivot小的元素时,i+1所指向的元素必然比pivot大,此时交换ij位置。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: