希尔排序-Shellsort

希尔排序

Shell排序算法:一种更高效的插入排序。
基本原理:先比较距离远的元素,而不是简单交换排序算法那样比较相邻的元素,这样可以快速减少大量的无序情况,从而减轻后续的工作。被比较的元素之间距离逐渐减少,直到为1时变成相邻元素的互换。
参考:https://www.cnblogs.com/lustar/p/7396048.html
https://blog.csdn.net/m0_37190495/article/details/80655139
https://www.cnblogs.com/youzhibing/p/4889037.html
三篇博客更容易理解。
我这篇博客,主要是为了以后方便回顾,内容以后再整理。
代码

/* 因为gap最后总会变成1,故最后一次排序将是数组的所有元素进行一次插入排序,此时数组基本有序,插入排序效率会很高! */
void shellsort(int v[],int n){
	int gap, i , j, temp;

	for(gap = n/2 ; gap > 0; gap /=2 ){	/* gap:增量,即控制元素之间的距离。将距离为gap的元素分为一组 */
		for(i = gap; i < n; i++){	/* 前gap个元素,每个都是对应分组内的第一个元素,对插入排序来说,只有一个元素时本身就是有序的,故所有组的第一个元素不用排序 */
			for(j = i - gap; j >= 0 && v[j]>v[j+gap]; j-=gap){/* 相当于将距离为gap的元素提取出来组成一个短的无序数组,再对其进行插入排序 */
				/* 最重要的是这个循环,这层循环不是相邻元素挨个比较,而是每隔gap距离的元素组成的更短的数组进行排序 */
				temp = v[j];
				v[j] = v[j+gap];
				v[j+gap] = temp;
			}
		}
	}
}

Shell排序基本插入排序,可以参考我的博客:https://blog.csdn.net/qq_28193019/article/details/88297404
对照里面的代码结构,可以发现,shell排序主要就是采用了“增量下降”法,多了个增量控制:gap,其他的跟基本的插入排序一模一样,所以对插入排序了解有助于理解shell排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值