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

谢尔排序/缩减增量排序(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 }

 

posted @ 2016-05-09 19:05  19Q3  阅读(260)  评论(0编辑  收藏  举报