(六)、排序算法:希尔排序

一、希尔排序的步骤

     1、选定一个增量h,按h作为分组的依据,对数据进行分组

     2、对分好组的每一组数据完成插入排序

     3、减小增量,最小为1,重复第2步

二、增量h的选定

      h初始值的选定规则:

      int h = 1;

    //计算h的初始值,num为数组的元素个数
    while (h < num / 2)
    {
        h = 2 * h + 1;
    }

    h的循环规则

    h = h/2;

三、代码和运行结果:

  


#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