// 挖坑1
Paritition1(int arr[], int l, int r) {
int pivot = arr[l];
while (l < r) {
while (l < r && arr[r] >= pivot) {
r--;
}
arr[l] = arr[r];
while (l < r && arr[l] <= pivot) {
l++;
}
arr[r] = arr[l];
}
arr[l] = pivot;
return l;
}
void QuickSort(int arr[], int l, int r) //快排母函数
{
if (l < r) {
int pivot = Paritition1(arr, l, r);
QuickSort(arr, l, pivot - 1);
QuickSort(arr, pivot + 1, r);
}
}
// 挖坑第二种 没有上一种简单
void quickSort(int* arr, int left, int right) {
if (left < right) {
int l, r, pivot;
l = left;
r = right;
pivot = arr[l];
while (l < r) {
while(l < r && arr[r] > pivot) {
r--;
}
if(l < r) { // 因为下面l自增了一步,所以要加判断,否则arr[l]=pivot会不对
arr[l++] = arr[r];
}
while(l < r && arr[l] < pivot) {
l++;
}
if(l < r) {
arr[r--] = arr[l];
}
}
arr[l] = pivot;
quickSort(arr, left, l-1); /* 递归调用 */
quickSort(arr, l+1, right); /* 递归调用 */
}
}
// 交换 感觉更好理解
void quickSort(int* arr, int left, int right) {
if (left < right) {
int l, r, pivot, tmp;
l = left;
r = right;
pivot = arr[l];
while (l < r) {
while(l < r && arr[r] > pivot) {
r--;
}
while(l < r && arr[l] < pivot) {
l++;
}
tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
}
// r先动的,所以重合点应该比pivot小,因此可以交换 假如选择的pivot不在第一个则还要判断
arr[left] = arr[l];
arr[l] = pivot;
quickSort(arr, left, l-1); /* 递归调用 */
quickSort(arr, l+1, right); /* 递归调用 */
}
}