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

时间:2023-03-10 01:53:52
谢尔排序/缩减增量排序(C++)

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

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

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

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

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

代码实现:

 #include<iostream>
#include<vector> using namespace std; //谢尔排序(缩减增量排序)
template<typename Comparable>
void shellsort(vector<Comparable> &a)
{
for (int gap = a.size() / ;gap > ;gap /= )
{
for (int i = gap;i < a.size();i++)
{
Comparable tmp = a[i];
int j = i; for (;j >= gap&&tmp < a[j - gap];j -= gap)
{
a[j] = a[j - gap];
}
a[j] = tmp;
}
}
} int main()
{
vector<int> a = { ,,,,, };
shellrtsort(a);
for (auto c : a)
{
cout << c<<endl;
}
system("pause");
}