模板 C/C++ 快速排序

一、基本思想
通过一趟排序将待排序列分割成独立的两部分,其中一部分关键字均比另外一部分的关键字小,这两部分记录再继续进行排序,以达到整个序列有序。
在这里插入图片描述
二、代码实现

关键代码

void quickSort(int l,int r){
    int mid = (arr[l]+arr[r])>>1;
    int i = l, j = r;
    do{
        while(arr[i] < mid){
            i ++;
        }
        while(arr[j] > mid){
            j --;
        }
        if(i <= j){
            int p = arr[i];
            arr[i] = arr[j];
            arr[j] = p;
            i ++; j --;
        }
    }while(i<=j);
    if(i < r){
        quickSort(i,r);
    }
    if(j > l){
        quickSort(l,j);
    }
}

完整代码

#include<cstdio>
const int size = 100005;
using namespace std;
int n;
int arr[size];
int read(){
    int f = 1,ans = 0;
    char c;
    c = getchar();
    while(c<'0'||c>'9'){
        if(c == '-'){
            f = -1;
        }
        c = getchar();
    }
    while(c>='0'&&c<='9'){
        ans = ans*10+c-'0';
        c = getchar();
    }
    return f*ans;

}

void quickSort(int l,int r){
    int mid = (arr[l]+arr[r])>>1;
    int i = l, j = r;
    do{
        while(arr[i] < mid){
            i ++;
        }
        while(arr[j] > mid){
            j --;
        }
        if(i <= j){
            int p = arr[i];
            arr[i] = arr[j];
            arr[j] = p;
            i ++; j --;
        }
    }while(i<=j);
    if(i < r){
        quickSort(i,r);
    }
    if(j > l){
        quickSort(l,j);
    }
}


int main() {
    n = read();
    for(int i = 1; i <= n; i ++){
        arr[i] = read();
    }
    quickSort(1,n);
    for(int i = 1; i <= n; i ++){
        printf("%d ",arr[i]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_37550202/article/details/88620179