void quickSort(int* arr, int low, int high) {
if (low >= high) { // 结束标志
return;
}
int first = low; //地位坐标
int last = high; //高位坐标
int key = arr[first]; //设置第一个为基准
while (first < last) {
//将比第一个小的移到前面
while (first < last && arr[last] >= key) {
last--;
}
if (first < last) {
arr[first++] = arr[last];
}
//将比第一个大的移到后面
while (first < last && arr[first] <= key) {
first++;
}
if (first < last) {
arr[last--] = arr[first];
}
}
arr[first] = key;
//前半递归
quickSort(arr, low, first - 1);
//后半递归
quickSort(arr, first + 1, high);
}
void quickSort(int *arr, int low, int high): 这是一个函数声明,它表示定义了一个名为quickSort的函数,该函数接受一个指向整型数组的指针arr,以及最低索引low和最高索引high。if (low >= high) { return; }: 这一行检查最低索引low是否大于等于最高索引high。如果是,说明已经完成了对这个子数组的排序,直接返回结束递归。int first = low;: 初始化一个变量first,它指向最低索引low。int last = high;: 初始化一个变量last,它指向最高索引high。int key = arr[first];: 将数组中第一个元素作为基准值key。while (first < last) {: 这个循环用于进行分区操作,当first指针小于last指针时,执行以下操作。while (first < last && arr[last] >= key) { last--; }: 从数组的高位开始,向前搜索,找到第一个小于基准值key的元素,并将last指针向前移动。if (first < last) { arr[first++] = arr[last]; }: 若first指针小于last指针,则将找到的小于基准值的元素移到低位,并将first指针向后移动。while (first < last && arr[first] <= key) { first++; }: 从数组的低位开始,向后搜索,找到第一个大于基准值key的元素,并将first指针向后移动。if (first < last) { arr[last--] = arr[first]; }: 若first指针小于last指针,则将找到的大于基准值的元素移到高位,并将last指针向前移动。arr[first] = key;: 将基准值key放置到正确的位置上。quickSort(arr, low, first - 1);: 对基准值左边的子数组进行递归排序,即调用quickSort函数处理最低索引到基准值位置之间的部分。quickSort(arr, first + 1, high);: 对基准值右边的子数组进行递归排序,即调用quickSort函数处理基准值位置到最高索引之间的部分。
通过不断地选择基准值并将数组分为两个部分,然后对这两个部分进行递归排序,最终实现了快速排序算法。这种分治的思想使得排序的效率较高。