# coding:utf-8 defshell_sort(alist):"""希尔排序"""
n =len(alist)
gap = n //2# gap 变化到0之前,插入算法执行的次数while gap >=1:# 插入算法与普通的插入算法的区别 就是gap步长for j inrange(gap, n):
i = j
while i >0:if alist[i]< alist[i-gap]:
alist[i], alist[i-gap]= alist[i-gap], alist[i]
i -= gap
else:break# 缩短gap步长
gap //=2
if __name__ =="__main__":
li =[54,26,93,17,77,31,44,55,20]print(li)
shell_sort(li)print(li)
归并排序
# coding:utf-8defmerge_sort(alist):"""归并排序"""
n =len(alist)if n <=1:return alist
mid = n //2# left 采用归并排序后形成的有序的新的列表
left_li = merge_sort(alist[:mid])# right 采用归并排序后形成的有序的新的列表
right_li = merge_sort(alist[mid:])# 将两个有序的列表合并成一个整体# merge(left, right)
left_pointer, right_porinter =0,0
result =[]while left_pointer <len(left_li)and right_porinter <len(right_li):if left_li[left_pointer]<= right_li[right_porinter]:
result.append(left_li[left_pointer])
left_pointer +=1else:
result.append(right_li[right_porinter])
right_porinter +=1
result += left_li[left_pointer:]
result += right_li[right_porinter:]return result
if __name__ =="__main__":
li =[54,26,93,17,77,31,44,55,20]print(li)
sorted_li = merge_sort(li)print(sorted_li)
希尔排序# coding:utf-8 def shell_sort(alist): """希尔排序""" n = len(alist) gap = n // 2 # gap 变化到0之前,插入算法执行的次数 while gap >= 1: # 插入算法与普通的插入算法的区别 就是gap步长 for j in ra...