编写快速排序函数,实现对给定的数组 vec 从下标 start 到 finish 之间的元素进行排序。 快速排序的思想是先以数组中的某个数为基准,将数组中所有小于该数的数放于数组左边,而所有大于该数的数放于数组右边,所选的某个数放于这两种数中间(程序中 Partition 函数的作用),然后对划分后的左半边数组和右半边数组用同样的方式处理。
时间: 2024-02-05 21:10:43 浏览: 90
以下是快速排序函数的代码实现:
```
void quickSort(vector<int>& vec, int start, int finish) {
if (start >= finish) { // 边界条件
return;
}
int pivot = vec[start]; // 以第一个数为基准
int left = start + 1;
int right = finish;
while (left <= right) {
while (left <= right && vec[left] < pivot) { // 找到左半边第一个大于等于基准的数
left++;
}
while (left <= right && vec[right] >= pivot) { // 找到右半边第一个小于基准的数
right--;
}
if (left < right) { // 交换左半边大于等于基准的数和右半边小于基准的数
swap(vec[left], vec[right]);
}
}
swap(vec[start], vec[right]); // 把基准放到中间
quickSort(vec, start, right - 1); // 对左半边数组递归排序
quickSort(vec, right + 1, finish); // 对右半边数组递归排序
}
```
函数的输入参数是一个整数数组 vec,以及要排序的子数组的起始下标 start 和结束下标 finish。函数先以第一个数为基准,将数组划分为左右两部分,然后对左半边和右半边分别递归调用快速排序函数。在划分数组的过程中,用双指针 left 和 right 分别从左右两端开始向中间移动,左指针找到第一个大于等于基准的数,右指针找到第一个小于基准的数,然后交换这两个数。当左右指针相遇时,将基准和右指针所指的数交换位置,以把基准放到中间。
阅读全文