希尔排序是一种类直接插入排序的算法
初始化一个整数步长,先将间隔为的子表直接插入排序
然后缩减步长,将步长,再来一遍,最终落在。
Ref:
直接插入排序是不稳定的排序算法
12345678910111213141516171819202122232425262728
// 希尔排序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;}