希尔排序算法是在插入排序的基础上进行的改进,比插入排序更高效,是插入排序的一种,又叫‘缩小增量排序’。
希尔排序是把数组按下标的一定增量分组,对每组使用直接插入排序算法排序;
随着增量逐渐减少,每组包含的元素越来越多,当增量减至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