您的位置:首页 > 其它

快速排序

2015-07-23 22:30 120 查看
研究快速排序很长时间了。总结下自己的感受吧;

先是分解成两个部分,再是排序,最后合并。

伪代码

QUICKSORT(A, p, r)

1 if p < r

2 then q ← PARTITION(A, p, r) //关键

3 QUICKSORT(A, p, q - 1)

4 QUICKSORT(A, q + 1, r)

数组划分

快速排序算法的关键是PARTITION过程,它对A[p..r]进行就地重排:

PARTITION(A, p, r)

1 x ← A[r]

2 i ← p - 1

3 for j ← p to r - 1

4 do if A[j] ≤ x

5 then i ← i + 1

6 exchange A[i] <-> A[j]

7 exchange A[i + 1] <-> A[r]

8 return i + 1

代码

#include "iostream"
using namespace std;
void disp(int a[],int n)
{
for (int i=0;i<n;i++){
cout <<a[i]<<" ";
}
cout <<endl;
}

void swap(int &n,int& m)
{
int temp;
temp=n;
n=m;
m=temp;
}

int partition(int a[],int p,int r)
{
int i=p-1;
for (int j=p;j<=r-1;j++){
if (a[j]<=a[r]){
swap(a[++i],a[j]);
}
}
swap(a[i+1],a[r]);
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,r);
}
}
int main()
{
int a[100];
int n;
while (cin >>n){
for (int i=0;i<=n-1;i++){
cin >>a[i];
}
quicksort(a,0,n-1);
disp(a,n);
}
printf("dddd\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序