数据结构:希尔排序算法,详解,图解 -- 数据结构算法集

希尔排序算法

希尔排序算法

希尔排序算法是在插入排序的基础上进行的改进,比插入排序更高效,是插入排序的一种,又叫‘缩小增量排序’。

希尔排序是把数组按下标的一定增量分组,对每组使用直接插入排序算法排序;
随着增量逐渐减少,每组包含的元素越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止

对比插入排序

希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高

增量:两个元素之间的下标差

图解

相同颜色的元素为一组,图中的跨度即为增量,
在这里插入图片描述

代码实现

python2.7.5

# _*_ encoding:utf-8 _*_


# 希尔排序算法
def shell_sort(lists):
	step = len(lists) // 2			# 增量:两个元素之间的下标差
	while step >= 1:				# 增量大于等于1,为0时,算法结束
		for i in range(0,step):		# 按照增量分组的数量,增量长度即为分组数量
		# i为每组元素的起始元素的下标
			# 下面就是插入排序的实现
			for index in range(i+step,len(lists),step):		# 每组增量数据的下标,从第二个元素开始
				for j in range(index,0,-step):
					if lists[j] < lists[j - step]:
						lists[j], lists[j - step] = lists[j - step], lists[j]
					else:
						break
		step //= 2
	return lists


lt = [3,5,10,6,2,9,4]
print shell_sort(lt)

结果
在这里插入图片描述

文章中有不足之处请多多指教,欢迎讨论,共同学习,共同进步

参考:
https://blog.csdn.net/qq_39207948/article/details/80006224

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章