void quickSort(int *arr, int begin, int end)
{
//如果区间不只一个数
if (begin < end)
{
int temp = arr[begin]; //将区间的第一个数作为基准数
int i = begin; //从左到右进行查找时的“指针”,指示当前左位置
int j = end; //从右到左进行查找时的“指针”,指示当前右位置
//不重复遍历
while (i < j)
{
//当右边的数大于基准数时,略过,继续向左查找
//不满足条件时跳出循环,此时的j对应的元素是小于基准元素的
while (i < j && arr[j] > temp)
j--;
//将右边小于等于基准元素的数填入右边相应位置
arr[i] = arr[j];
//当左边的数小于等于基准数时,略过,继续向右查找
//(重复的基准元素集合到左区间)
//不满足条件时跳出循环,此时的i对应的元素是大于等于基准元素的
while (i < j && arr[i] <= temp)
i++;
//将左边大于基准元素的数填入左边相应位置
arr[j] = arr[i];
}
//将基准元素填入相应位置
arr[i] = temp;
//此时的i即为基准元素的位置
//对基准元素的左边子区间进行相似的快速排序
quickSort(arr, begin, i - 1);
//对基准元素的右边子区间进行相似的快速排序
quickSort(arr, i + 1, end);
}
//如果区间只有一个数,则返回
else
return;
}
int main()
{
int num[12] = {23, 45, 17, 11, 13, 89, 72, 26, 3, 17, 11, 13};
int n = 12;
quickSort(num, 0, n - 1);
cout << "排序后的数组为:" << endl;
for (int i = 0; i < n; i++)
cout << num[i] << ' ';
cout << endl;
system("pause");
return 0;
}
快排 (双指针)
最后更新于 2022-09-18 434 次阅读