标签:
他通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。(好复杂)
看了一下实现代码,你就会发现它与插入排序好像,只不过在外面套了件马甲。
通过下面的代码可以发现在插入排序的基础上套上了增量规则,原本增量为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 }
标签:
原文地址:http://www.cnblogs.com/19q3/p/5475070.html