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

谢尔排序/缩减增量排序(C++)

时间:2016-05-09 20:28:51      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

谢尔排序/缩减增量排序(C++)

 

谢尔排序/缩减增量排序:

  他通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。(好复杂)

看了一下实现代码,你就会发现它与插入排序好像,只不过在外面套了件马甲。

  通过下面的代码可以发现在插入排序的基础上套上了增量规则,原本增量为1的变为增量为gap。

 

 

代码实现

 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5 
 6 //谢尔排序(缩减增量排序)
 7 template<typename Comparable>
 8 void shellsort(vector<Comparable> &a)
 9 {
10     for (int gap = a.size() / 2;gap > 0;gap /= 2)
11     {
12         for (int i = gap;i < a.size();i++)
13         {
14             Comparable tmp = a[i];
15             int j = i;
16 
17             for (;j >= gap&&tmp < a[j - gap];j -= gap)
18             {
19                 a[j] = a[j - gap];
20             }
21             a[j] = tmp;
22         }
23     }
24 }
25 
26 int main()
27 {
28     vector<int> a = { 3,4,5,8,7,1 };
29     shellrtsort(a);
30     for (auto c : a)
31     {
32         cout << c<<endl;
33     }
34     system("pause");
35 }

 

谢尔排序/缩减增量排序(C++)

标签:

原文地址:http://www.cnblogs.com/19q3/p/5475070.html

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