希尔排序
Little_YangYang

1. 希尔排序

综述

希尔排序是一种类直接插入排序的算法

初始化一个整数步长,先将间隔为的子表直接插入排序

然后缩减步长,将步长,再来一遍,最终落在

Ref:

分析

稳定性

直接插入排序是稳定的排序算法

时间复杂度

空间复杂度

C++代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 希尔排序
void shellSort(vector<int>& nums) {
int n = nums.size();
// 初始间隔为n/2,最终间隔为1,每次间隔/2
for (int gap = n / 2; gap >= 1; gap/=2) {
// 从间隔开始,向上循环遍历数组
for (int i = gap; i < n; i += 1) {
// 临时变量为当前值
int temp = nums[i];
int j;
// 从当前值开始,向前循环遍历,如果看到有比当前值大的就交换,每次的步长为gap的数值
for (j = i; j >= gap && nums[j - gap] > temp; j -= gap) {
nums[j] = nums[j - gap];
}
// 把当前的值插入到最终的地方;
nums[j] = temp;
}
}
}

int main() {
vector<int> nums = { 9,8,7,6,5,4,3,2,1 };
shellSort(nums);
for (int n : nums) {
cout << n << endl;
}
return 0;
}