快速排序(quick_sort)

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
分析:
这里写图片描述
第一个为关键字,依次与其比较,i为其位置,j为下一个比较数,如果大于关键字,j继续后移,没有其他操作;如果小于关键字,j处的数与i处进行交换,i、j均要后移。最后,将关键字与i处互换即可。
代码实现:

#include <bits/stdc++.h>

using namespace std;

int mid(int *a,int l,int r){
    int i=l+1;
    int temp=a[l];//取第一个为关键字 
    for(int j=l+1;j<=r;j++){
        if(a[j]<temp){
            swap(a[i++],a[j]);//小于关键字的交换 
        }
    }
    swap(a[l],a[i-1]);//交换关键字 
    return i-1;
}

void quick_sort(int *a,int l,int r){
    if(l>=r) return;

    int p = mid(a,l,r);//进行关键字比较,返回关键字位置 
    quick_sort(a,l,p-1);//关键字左边递归 
    quick_sort(a,p+1,r);//关键字右边递归 
}

int main(){
    int n;
    cin>>n;
    int arr[n];
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    quick_sort(arr,0,n-1);
    for(int i=0;i<n;i++)
        cout<<arr[i]<<" ";
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_29377279/article/details/79534233