https://blog.csdn.net/qq_43437122/article/details/105890206
代码如下:# author atguigu
def shell_sort(arr_list):
'''
交换法,用希尔排序方法对列表进行排序
参数:
待排序的列表
执行结果:
输出排好序后的列表
'''
i = (int)(len(arr_list) / 2) # i表示分组的个数,也即是步长
while i > 0: # 退出排序的条件
for x in range(i, len(arr_list)):
y = x - i
while y >= 0:
# 如果当前这个与元素大于加上步长后的那个元素,说明应该交换
if arr_list[y] > arr_list[y + i]:
arr_list[y], arr_list[y + i] = arr_list[y + i], arr_list[y]
y -= i # y向前移
i = (int)(i / 2) # 重新分组,更新步长
print(arr_list) # 输出排序后的列表
def shell_sort2(arr_list):
'''
位移法,用希尔排序方法对列表进行排序
参数:
待排序的列表
执行结果:
输出排好序后的列表
'''
gap = (int)(len(arr_list) / 2)
while gap > 0:
for i in range(gap, len(arr_list)):
temp = arr_list[i] # 待插入的元素
j = i - gap # 表示待插入的位置
# 循环查找待插入的位置
while j >= 0 and arr_list[j] > arr_list[j + gap]:
arr_list[j + gap] = arr_list[j] # 待插入位置上的元素往后移
j -= gap # 如果未找到待插入位置往前移
arr_list[j + gap] = temp # 说明找到了待插入的位置,将元素插入即可
gap = (int)(gap / 2) # 重置步长
print(arr_list)
def main():
arr_list = [2,6,8,1,5,0,4,3,7,9]
shell_sort(arr_list)
if __name__ == "__main__":
main()
运行结果:
不卑不亢。。
原创文章 107获赞 74访问量 1万+
关注
私信
展开阅读全文