八大排序——希尔排序

希尔排序算法思想

希尔排序核心思想就是:1,分组;2,直接插入排序:越有序越快
希尔排序就是多次利用直接插入排序的一个排序算法.
希尔排序的算法思想:间隔式分组,利用直接插入排序让组内有序,然后缩小分组再次排序,直到组数为1

希尔排序的理论基础就是直接插入排序越有序越快;
1.先预排序:取一个小于N的整数gap作为第一次增量,然后将距离gap的元素放入一组,再对每一组进行直接插入排序。然后将gap缩小,作为第二增量,重复以上操作。

2.再直接插入排序:当gap缩小为1时,进行直接插入排序

3.希尔排序利用了gap越大,挪动数据的距离越大,效率更高;gap越小,挪动的距离越小,前面让gap较大,可以让数据更快的挪动到自己对应的位置附近,减少挪动次数,让数据部分有序,利用直接插入排序越有序越快的特性。

 希尔排序的代码实现

//一趟希尔排序,gap为组数(间隔)
static  void  Shell(int* arr, int len, int gap)
{
	int  tmp;
	int j;
	for (int i = gap; i < len; i++)
	{
		tmp = arr[i];
		for (j = i - gap; j >= 0; j -= gap)
		{
			if (arr[j] > tmp)
			{
				arr[j + gap] = arr[j];
			}
			else
			{
				break;
			}
		}
		arr[j + gap] = tmp;
	}
}

void  ShellSort(int* arr, int len)
{
	int d[] = { 5,3,1 };//分组数,最后一个一定为1
	for (int i = 0; i < sizeof(d) / sizeof(d[0]); i++)
	{
		Shell(arr, len, d[i]);//一趟希尔排序
	}
}

希尔排序考察点:O(n1.3~n1.5),O(1),不稳定,详细见《数据结构C语言版》严蔚敏上284页.

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值