(6)ソートアルゴリズム:ヒルソート

まず、ヒルソーティングの手順

     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;
}


 演算結果:

 

 

 

おすすめ

転載: blog.csdn.net/weixin_40204595/article/details/109389188