代码模板:
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);
}