快速排序

来源:互联网 发布:vscode 大小写快捷键 编辑:程序博客网 时间:2024/05/17 06:50

研究快速排序很长时间了。总结下自己的感受吧;
先是分解成两个部分,再是排序,最后合并。

伪代码

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");}
0 0