用c++的方式设计分治法实现快速排序算法。 利用递归思想,实现快速排序
时间: 2023-06-29 12:09:23 浏览: 112
好的,以下是基于C++的快速排序实现,使用了分治法以及递归思想:
```c++
#include <iostream>
using namespace std;
void quickSort(int arr[], int left, int right) {
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
// partition
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
// recursion
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
int main() {
int arr[] = { 10, 7, 8, 9, 1, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
cout << "Sorted array: \n";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
```
在上面的代码中,我们首先定义了一个 `quickSort` 函数,它接受三个参数:待排序数组 `arr`,数组左边界 `left` 以及数组右边界 `right`。
接着,我们选取了数组中间位置的元素作为枢轴(pivot),并对数组进行划分(partition)。我们从数组的两端开始扫描,找到第一个大于等于 pivot 的元素和第一个小于等于 pivot 的元素,将它们交换。当 i 和 j 相遇时,我们完成了一次 partition 操作。
最后,我们通过递归的方式对数组的左半部分和右半部分进行排序。如果左半部分的数组长度大于 1,则递归调用 `quickSort` 函数对其进行排序;同理,如果右半部分的数组长度大于 1,则递归调用 `quickSort` 函数对其进行排序。
最后,我们在 `main` 函数中定义了一个待排序数组 `arr`,并将其传递给 `quickSort` 函数进行排序。最终,我们输出排序后的数组。
阅读全文