快速排序模板(C语言)

代码模板:

void swap(int* a, int* b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

//以中间点为pivot
void quick_sort_mid(int* arr, int l, int r){
    if(l >= r) return;
    int i = l - 1, j = r + 1, x = arr[l + r >> 1];
    while(i < j){
        while(arr[++i] < x);
        while(arr[--j] > x);
        if(i < j){
            swap(&arr[i], &arr[j]);
            }
        }
    quick_sort_mid(arr, l, j);
    quick_sort_mid(arr, j + 1, r);
}

//以最左边的点为pivot
void quick_sort_left(int* arr, int l, int r){
    if(l >= r) return;
    int i = l, j = r + 1, x = arr[l];
    while(i < j){
        while(arr[++i] < x && i < r);
        while(arr[--j] > x && j > l);
        if(i < j){
            swap(&arr[i], &arr[j]);
            }
        }
    swap(&arr[l], &arr[j]);
    quick_sort_left(arr, l, j - 1);
    quick_sort_left(arr, j + 1, r);
}

//以最右边的点为pivot
void quick_sort_right(int* arr, int l, int r){
    if(l >= r) return;
    int i = l - 1, j = r, x = arr[r];
    while(i < j){
        while(arr[++i] < x && i < r);
        while(arr[--j] > x && j > l);
        if(i < j){
            swap(&arr[i], &arr[j]);
            }
        }
    swap(&arr[r], &arr[i]);
    quick_sort_right(arr, l, i - 1);
    quick_sort_right(arr, i + 1, r);
}
上一篇:快速幂与快速乘


下一篇:0.Qt Quick