快速排序

#include <bits/stdc++.h>
using namespace std;
void ksort(int *a,int l,int r){
    int mid = a[(l+r)/2];
    int i = l,j = r;
    do{
        while(a[i]<mid){
            i++;
        }
        while(a[j]>mid){
            j--;
        }
        if(i<=j){
            swap(a[i],a[j]);
            i++;
            j--;
        }
    }while(i<=j);
    if(l<j){
        ksort(a,l,j);
    }
    if(i<r){
        ksort(a,i,r);
    }
}
int main(){
    int n;
    cin>>n;
    int a[n+5];
    for(int i = 1;i<=n;i++){
        cin>>a[i];
    }
    ksort(a    ,1,n);
    for(int i = 1;i<=n;i++){
        cout<<a[i]<<endl;
    }
    return 0;
}

 

#include <bits/stdc++.h>
using namespace std;
void ksort(int *a,int l,int r){
    if(l<r){
        int p = l;
        int i = l,j = r;
        int mid = a[p];
        while(i!=j){
            while(a[j]>=mid && i!=j){
                j--;
            }
            while(a[i]<=mid && i!=j){
                i++;
            }
            if(i<j){
                swap(a[i],a[j]);
            }
        }
        swap(a[l],a[i]);
        ksort(a,l,i-1);
        ksort(a,i+1,r);
    }
}
int main(){
    int n;
    cin>>n;
    int a[n+5];
    for(int i = 0;i<n;i++){
        cin>>a[i];
    }
    ksort(a,0,n-1);
    for(int i = 0;i<n;i++){
        cout<<a[i]<<endl;
    }
    return 0;
}

 基本思想

开始给定一个基准元素(随机),经过一次循环后,让比基本元素小的元素全部放在基准元素的左边,

让比基本元素大的元素全部放在基准元素的右边。

找好基准元素后,对基准元素的左边部分和右边部分分别重复上述过程(也就是递归)。

posted @ 2024-03-26 21:47  王一行(小号)  阅读(3)  评论(0编辑  收藏  举报