美文网首页
QuickSort快速排序

QuickSort快速排序

作者: myleosu | 来源:发表于2019-04-03 00:03 被阅读0次

    QuickSort快速排序思想如下,每次选一个数出来当做基准数,通过移动数组使得这个数字左边都小于基准数,右边都大于基准数,然后不断递归划分直到每个区间为都为1即完成排序。
    主要步骤如下
    1、每次从数组中选一个基数a[r](这里采取最后一个数为基准数)
    2、从前往后遍历到r,记得当前数字是否比基数a[r]小,小的话就与比基准数大的一个数交换。
    3、将a[i+1]与a[r]交换即可。
    4、将区间low~i 与 i+2~high重复步骤1,直到区间为1

    一次划分演示如下:


    1.png 2.png

    代码

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int MAXN = 100010;
    
    int partition(int *a,int l,int r){
        int value = a[r];
        int i = l-1;
        for(int j = l;j<r;j++){
            if(a[j]<=value){
                i++;
                swap(a[i],a[j]);
            }
        }
        swap(a[i+1],a[r]);
        return i+1;
    }
    
    void quicksort(int *a,int l,int r){
        if(l<r){
            int mid = partition(a,l,r);
            quicksort(a,l,mid-1);
            quicksort(a,mid+1,r);
        }
    }
    
    int a[MAXN];
    
    int main(){
        int n;
        scanf("%d",&n);
        for(int i = 0;i<n;i++)
            scanf("%d",&a[i]);
        //sort(a,a+n);
        quicksort(a,0,n-1);
        for(int i = 0;i<n;i++)
            printf("%d ",a[i]);
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:QuickSort快速排序

          本文链接:https://www.haomeiwen.com/subject/wcyobqtx.html