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

希尔排序算法

  • 折半/二分查找算法
  • 冒泡排序算法
  • 插入排序算法
  • 选择排序算法
  • 快速排序算法
  • 希尔排序算法
  • 堆排序算法
  • 归并排序算法

希尔排序算法

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

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

对比插入排序

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

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

图解

相同颜色的元素为一组,图中的跨度即为增量,
数据结构:希尔排序算法,详解,图解 -- 数据结构算法集_第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

你可能感兴趣的:(数据结构与算法,python)