标签:cto tor while 基本 希尔排序 增量排序 vector 记录 分组
概念
同直接插入排序,多段后移。也叫增量排序。
基本思想
先取一个小于n的数d1作为第一个增量,把文件的全部记录分组
所有距离为d1的倍数的记录放在同一个组中
现在各组内进行直接插入排序
然后取第二个增量d2<d1重复上述的分组和排序,直至所取得增量 = 1,即将所有的记录放在同一组中进行直接插入排序为止
实现代码
1 void ShellSort(vector<int> &nums) 2 { 3 int len = nums.size(); 4 int increment = len; 5 while (increment > 1) 6 { 7 increment = increment / 3 + 1; 8 for (int i = increment; i < len; i++) 9 { 10 int temp = nums[i]; 11 if (nums[i] < nums[i - increment])//比较同组内的数据 12 { 13 int j; 14 for (j = i - increment; j >= 0 && nums[j] > temp; j = j - increment) 15 nums[j + increment] = nums[j]; 16 nums[j + increment] = temp; 17 } 18 } 19 } 20 }
性能
最好:O(n)
最坏:O(n^2)
平均:不确定
空间复杂度:O(1)
稳定性:不稳定
标签:cto tor while 基本 希尔排序 增量排序 vector 记录 分组
原文地址:https://www.cnblogs.com/jpzhu/p/12697014.html