Python数据结构和算法之希尔排序

Kamilia ·
更新时间:2024-09-20
· 835 次阅读

希尔排序的原理详见Java之希尔排序:

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万+ 关注 私信 展开阅读全文
作者:不卑不亢。。



希尔排序 算法 排序 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号