希尔排序c++代码
时间: 2023-07-21 13:08:24 浏览: 112
cpp代码-排序算法之希尔排序
希尔排序(Shell Sort)是插入排序的一种改进版本,通过将待排序数据划分为若干个子序列分别进行插入排序,从而达到排序的目的。希尔排序的时间复杂度为O(nlogn),相较于插入排序的O(n^2)具有更好的性能。
以下是一个基于C++的希尔排序代码示例:
```c++
#include <iostream>
#include <vector>
void shellSort(std::vector<int>& nums) {
int n = nums.size();
for(int gap = n / 2; gap > 0; gap /= 2) {
for(int i = gap; i < n; i++) {
int temp = nums[i];
int j;
for(j = i; j >= gap && nums[j - gap] > temp; j -= gap) {
nums[j] = nums[j - gap];
}
nums[j] = temp;
}
}
}
int main() {
std::vector<int> nums = {5, 2, 6, 0, 3, 9, 1, 7, 4, 8};
shellSort(nums);
for(int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
在上述代码中,我们定义了一个名为`shellSort()`的函数,用于对输入的vector进行希尔排序。首先,我们获取输入vector的长度n,并设置一个初始的间隔gap为n/2。随后,我们在一个循环中不断将gap折半,直到gap为0结束循环。在每次循环中,我们从第gap个元素开始遍历整个vector,对每个元素进行插入排序操作。具体来说,我们将当前元素保存到temp中,然后从当前元素往前遍历,如果前面的元素大于temp,则将前面的元素后移gap个位置,直到找到一个比temp小的元素,然后将temp插入到该元素的后面gap个位置处。最后,我们使用一个循环输出已排序的vector。
需要注意的是,在实际应用中,我们可能需要根据具体数据的特点选择不同的间隔序列,以达到更好的效果。
阅读全文