まず、ヒルソーティングの手順
1.増分hを選択し、データをグループ化するためのグループ化の基礎としてhを押します。
2.グループに分割されたデータの各グループの挿入ソートを完了します
3.増分を減らします。最小値は1で、手順2を繰り返します。
2.増分hの選択
hの初期値の選択規則:
int h = 1;
// hの初期値を計算します。numは配列内の要素の数です
while(h <num / 2)
{ h = 2 * h + 1; }
hのループルール
h = h / 2;
3.コードと実行結果:
#include <iostream>
using namespace std;
void shell_sort(int arry[], int num)
{
int h = 1;
//计算h的初始值
while (h < num / 2)
{
h = 2 * h + 1;
}
cout << "h=" << h << endl;
while (h >= 1)
{
//每次分组,要插入的第一个元素的index 是h
for (int i = h; i < num; i++)
{
//开始插入排序
for (int j = i; j >= h; j -= h)
{
if (arry[j - h] > arry[j])
{
int tmp = arry[j - h];
arry[j - h] = arry[j];
arry[j] = tmp;
}
}
}
h = h / 2;
cout << "h=" << h << endl;
}
}
int main()
{
int arr[] = {2,1,3,5,5,6,7,4,1};
shell_sort(arr,sizeof(arr)/sizeof(arr[0]));
for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
cout << arr[i] << endl;
return 0;
}
演算結果: