采用双指针的方法进行快排
代码一:
void quick_sort(int arr[], int low, int high) {
if (low > high) {
return;
}
int i = low; int j = high + 1;
int pivot = arr[low];
while (i < j) {
i++;
while (arr[i] < pivot)
i++;
j--;
while (arr[j] > pivot)
j--;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[low] = arr[j];
arr[j] = pivot;
quick_sort(arr, low, j - 1);
quick_sort(arr, j + 1, high);
}
代码二:
void Q_Sort(int arr[], int low, int high) {
if (low > high)
return;
int i = low, j = high ;
int pivot = arr[low];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
while (i<j&&arr[i]<=pivot) {
i++;
}
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[low] = arr[j];
arr[j] = pivot;
Q_Sort(arr, low,j-1);
Q_Sort(arr, j+1, high);
}
代码二需要注意的问题:
1.为什么内层循环还要再判断i<j?
内层循环还要再判断i<j
2.枢轴元素采取最左边的元素,为什么就要先从右往左移动指针?(里面两个while循环的顺序不是任意的)
快速排序为何先要从右向左查找的原因
3.不懂的时候去看看