码迷,mamicode.com
首页 > 编程语言 > 详细

希尔排序

时间:2020-04-14 12:56:38      阅读:81      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!