用c++写一个以中间为基准数的快速排序的算法,并用中文注释
时间: 2024-03-08 15:51:06 浏览: 25
好的,以下是用C++实现以中间为基准数的快速排序算法,并附带中文注释:
```cpp
#include <iostream>
using namespace std;
// 以中间数为基准进行快速排序
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[(left + right) / 2]; // 将中间数作为基准数
while (i <= j) {
while (arr[i] < pivot) { // 找到左半部分大于等于基准数的数
i++;
}
while (arr[j] > pivot) { // 找到右半部分小于等于基准数的数
j--;
}
if (i <= j) { // 交换左右两部分的数字
swap(arr[i], arr[j]);
i++;
j--;
}
}
quickSort(arr, left, j); // 递归处理左半部分
quickSort(arr, i, right); // 递归处理右半部分
}
int main() {
int arr[] = { 5, 3, 8, 4, 2, 7, 1, 6 };
int len = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, len - 1);
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
return 0;
}
```
在这段代码中,我们首先定义了一个 `quickSort()` 函数,该函数的参数包括待排序的数组 `arr`、左边界 `left` 和右边界 `right`。我们先判断左右边界是否相等,如果是则说明数组已经有序,直接返回即可;否则,我们将数组按中间数进行分割,然后对左半部分和右半部分递归地进行快速排序。
在 `quickSort()` 函数中,我们使用了两个指针 `i` 和 `j` 分别指向数组的左边界和右边界,同时取中间数作为基准数 `pivot`。然后不断移动 `i` 和 `j`,找到左半部分大于等于基准数的数和右半部分小于等于基准数的数,然后交换这两个数的位置。最终,我们将数组分成了两部分,左半部分小于等于基准数,右半部分大于等于基准数。
在交换数字的过程中,我们使用了 `swap()` 函数,该函数可以交换两个变量的值。
最后,在 `main()` 函数中,我们定义了一个数组 `arr`,并调用 `quickSort()` 函数对其进行排序。