请用C++实现希尔排序算法
时间: 2024-09-17 14:02:17 浏览: 44
希尔排序(Shell Sort),也称为缩小增量排序,是一种基于插入排序的优化版本。它通过将待排序的数据分组,先对每组进行插入排序,然后逐步减小组距,直到组距为1,完成整个序列的排序。以下是C++实现希尔排序的一个简单版本:
```cpp
#include <iostream>
#include <vector>
void shellSort(std::vector<int>& arr, int gap = 1) {
// 循环直到组距变为1
while (gap > 0) {
// 对当前组距进行插入排序
for (int i = gap; i < arr.size(); ++i) {
int temp = arr[i];
int j;
// 将temp元素插入到已排序部分的正确位置
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
arr[j] = arr[j - gap];
arr[j] = temp;
}
// 减少组距以便处理更紧密的子数组
gap /= 2;
}
}
// 示例使用
int main() {
std::vector<int> nums = {9, 7, 5, 11, 12, 2, 14, 3};
std::cout << "Before sorting:\n";
for (const auto& num : nums)
std::cout << num << ' ';
std::cout << '\n';
shellSort(nums);
std::cout << "After sorting:\n";
for (const auto& num : nums)
std::cout << num << ' ';
stdollars "\n";
return 0;
}
```
在这个例子中,`shellSort`函数接受一个整数向量和可选的初始组距`gap`。当`gap`减少到1时,整个序列就被认为是有序的。
阅读全文