c++实现轴点“三者取中”法的快速排序算法(函数命名为quickSortImproved),并实现快速排序算法在各个序列上所需的排序码比较次数的统计,带注释
时间: 2024-05-12 22:13:23 浏览: 20
以下是C++实现轴点“三者取中”法的快速排序算法(函数命名为quickSortImproved),并实现快速排序算法在各个序列上所需的排序码比较次数的统计,带注释:
```c++
#include <iostream>
#include <vector>
// 获取三者取中的中间值
int getMid(int a, int b, int c) {
if (a > b)
std::swap(a, b);
if (a > c)
std::swap(a, c);
if (b > c)
std::swap(b, c);
return b;
}
// 快速排序的实现函数
// left:待排序序列的左端点下标
// right:待排序序列的右端点下标
// compareCount:排序码比较次数,用于统计
void quickSortImproved(std::vector<int>& nums, int left, int right, int& compareCount) {
if (left >= right) // 递归结束条件:序列为空或只有一个元素
return;
int mid = getMid(nums[left], nums[right], nums[(left + right) / 2]); // 获取中间值
int i = left, j = right;
while (i <= j) {
while (nums[i] < mid) { // 从左往右找到第一个大于等于中间值的元素
++i;
++compareCount;
}
while (nums[j] > mid) { // 从右往左找到第一个小于等于中间值的元素
--j;
++compareCount;
}
if (i <= j) { // 如果找到了需要交换的一对元素
std::swap(nums[i], nums[j]); // 交换
++i;
--j;
}
}
quickSortImproved(nums, left, j, compareCount); // 对左半部分递归排序
quickSortImproved(nums, i, right, compareCount); // 对右半部分递归排序
}
int main() {
std::vector<int> nums = {7, 3, 5, 8, 1, 9, 4, 2, 6}; // 待排序序列
int compareCount = 0; // 排序码比较次数,初始化为0
quickSortImproved(nums, 0, nums.size() - 1, compareCount); // 排序
std::cout << "排序后的序列为:";
for (int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl << "排序码比较次数为:" << compareCount << std::endl; // 输出排序码比较次数
return 0;
}
```
该算法的时间复杂度为 $O(nlog_2n)$,其中 $n$ 为待排序序列的长度。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)