数据结构--希尔排序

希尔排序是一种基于插入排序的算法,通过把一个数组分成几个小数组,间隔为h,即:

假设h为4

       A   B  C  D  E  F  G  H  I  J  K  F  L  M  N  O 

①   A--------------E-------------I------------L      

 ②         B-------------F------------J-------------M

  ③            C-------------G-----------K-------------N

   ④                 D------------H------------F-------------O

①②③④都是间隔为h的小数组。

用插入排序将h个小数组独立排序,因为h-子数组是独立的,可以在h-子数组中,将每一个元素交换到比它大的元素之前去。然后

不断循环交换,直到h减到为1,排序完成。

代码:

扫描二维码关注公众号,回复: 2852895 查看本文章
#include<iostream>
using namespace std;
int a[31];
int n;
void set(int *a)
{
	int h = n;
	int i, j;
	do
	{
		h = h / 3 + 1;//增量
		for (i = h + 1; i <= n; i++)
		{
			if (a[i] < a[i - h])//要是前一个比后一个大就交换
			{
				//交换元素
				a[0] = a[i];
				for (j = i - h; j > 0 && a[0] < a[j]; j -= h)//这里循环是为了将间隔为h的整个小数组都进行排序
				{
					a[j + h] = a[j];
				}
				a[j + h] = a[0];
			}
		}
		for (int i = 1; i <n; i++)
		{
			cout << a[i] << " ";
		}
		cout << a[n] << endl;
	} while (h > 1);

}

int main()
{
	n = 1;
	while (cin >> a[n++]);//边输入边记录元素个数
	n -= 2;
	set(a);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41676901/article/details/81567284