C++ 希尔排序

余生颓废 提交于 2019-12-02 06:44:07

希尔排序的原理:

(1)首先,从数组的首元素开始每隔“步长(间隔)”个元素就挑选一个元素出来作为子数组元素。

(2)然后每个子数组各自进行比较,比较好后,每个子数组都有顺序,进入下一轮,步长(间隔)减少,

         再根据步长(间隔)分组进行比较。

(3)重复以上操作,最后就有顺序了。

#include <iostream>
#include <stdlib.h>
using namespace std;

/*******************************************/
/*  希尔排序
/******************************************/

void ShellSort(int array[], int n)  //希尔排序函数
{
	int i, j, step;
	for (step = n / 2; step > 0; step = step / 2)  //这里的step步长是根据10个元素这种情况定义的
	{
		for (i = 0; i < step; i++)  //i是子数组的编号
		{
			for (j = i + step; j < n; j = j + step)  //数组下标j,数组步长下标j+step
			{
				if (array[j] < array[j - step])
				{
					int temp = array[j];  //把数组下标j的值放到temp中
					int k = j - step;

					while (k >= 0 && temp < array[k])
					{
						array[k + step] = array[k];  //把大的值往后插入
						k = k - step;
					}
					array[k + step] = temp;  //把小的值往前插入
				}
			}
		}
	}
}


int main(void)  //主程序
{
	const int n = 10;  //数组元素的数量
	int array[n];
	cout << "请输入10个整数:" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> array[i];
	}

	cout << endl;  //换行

	ShellSort(array, n);  // 调用BubbleSort函数  进行比较

	cout << "由小到大的顺序排列后:" << endl;
	for (int i = 0; i < n; i++)
	{
		cout << "Array" << "[" << i << "]" << " = " << array[i] << endl;
	}

	cout << endl << endl;  //换行

	system("pause");  //调试时,黑窗口不会闪退,一直保持
	return 0;
}

希尔排序图解:

运行结果:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!