编写快速排序函数,实现对给定的数组 vec 从下标 start 到 finish 之间的元素进行排序。 快速排序的思想是先以数组中的某个数为基准,将数组中所有小于该数的数放于数组左边,而所有大于该数的数放于数组右边,所选的某个数放于这两种数中间(程序中 Partition 函数的作用),然后对划分后的左半边数组和右半边数组用同样的方式处理
时间: 2024-02-05 22:11:02 浏览: 28
以下是快速排序函数的代码实现:
```c++
void quickSort(vector<int>& vec, int start, int finish) {
if (start >= finish) return;
int pivot = vec[finish]; // 以最后一个元素为基准
int i = start - 1;
for (int j = start; j < finish; j++) {
if (vec[j] < pivot) {
i++;
swap(vec[i], vec[j]);
}
}
swap(vec[i + 1], vec[finish]);
int mid = i + 1;
quickSort(vec, start, mid - 1); // 对左半边数组递归排序
quickSort(vec, mid + 1, finish); // 对右半边数组递归排序
}
```
在该函数中,我们首先选取数组中最后一个元素作为基准 pivot。然后定义两个指针 i 和 j,i 表示小于 pivot 的数的右边界,j 从 start 到 finish 扫描数组,如果当前元素小于 pivot,则将其与 i+1 位置的元素交换,并将 i 加 1。扫描完成后,将 pivot 与 i+1 位置的元素交换,此时 i+1 就是 pivot 在数组中的位置。接着,我们将数组分为两个部分,分别递归对左半边数组和右半边数组进行排序。
可以调用该函数对 vector<int> 类型的数组进行快速排序:
```c++
vector<int> vec = {3, 5, 2, 7, 6, 1, 8, 4};
quickSort(vec, 0, vec.size() - 1);
for (int num : vec) {
cout << num << " ";
}
```
该程序的输出结果为:
```
1 2 3 4 5 6 7 8
```
阅读全文