博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用排序算法:希尔排序
阅读量:6548 次
发布时间:2019-06-24

本文共 684 字,大约阅读时间需要 2 分钟。

算法思路:

希尔排序算是插入排序的一种,是改进版的直接插入排序,和直接插入排序不同的是它是按组进行插入排序的。步骤如下:

  1. 取一个整数d1 = n / 2,将元素分成d1个组,每组相邻元素之间距离d1,然后在每组内部进行直接插入排序。
  2. 取第二个整数d2 = d1 / 2再将元素分成d2个组,然后再在每组内部进行插入排序。
  3. 重复上面的步骤直到d = 1 的时候即所有元素在同一组进行插入排序。

例如数组 [4,3,5,1,6,0,7,2]排序过程如下图所示

希尔排序并每趟并不是使某些元素有序,而是使整体数据越来越有序,只会在最后一趟排序能使得所有元素都有序。

代码实现:

def shell_sort(nums):    d = len(nums) // 2    while d > 0:   # 分组到一的时候停止        for i in range(d, len(nums)):  # 第i个分组            temp = nums[i]  #无序区第一位            j = i - d  # 有序区最后一位            while j >= 0 and nums[j] > temp:  # 如果有序区大于无序区                nums[j + d] = nums[j]                j -= d            nums[j+d] = temp        d //= 2

 

转载于:https://www.cnblogs.com/FanMLei/p/10500994.html

你可能感兴趣的文章
Java访问类中private属性和方法
查看>>
UIImage扩展方法(Category)支持放大和旋转
查看>>
可复用的WPF或者Silverlight应用程序和组件设计(3)——控件级别
查看>>
hibernate的一些缺陷(转)
查看>>
An easy to use android color picker library
查看>>
忘记Django登陆账号和密码的处理方法
查看>>
C++的头文件和实现文件分别写什么
查看>>
C语言 · 学生信息(P1102)
查看>>
做项目,还是标准点好(对象命名标准),呵呵
查看>>
iOS开发学习笔记:使用xcode里的单元测试,放在STAssert…里面的语句无法使用自动完成功能...
查看>>
利用批处理文件和任务计划实现Oracle数据库的自动备份
查看>>
API开发 – 让异常变得优雅
查看>>
【270天】每日项目总结系列008(2017.11.02)
查看>>
记一次线上CPU超高的排查过程
查看>>
获取群成员邀请关系
查看>>
Ionic:livereload on iOS and android
查看>>
react day one 让陡峭的学习曲线平缓一点
查看>>
Coursera 的 GraphQL 之旅
查看>>
Amazon Aurora新增“回溯”特性,让DB集群可以回退到特定时间点
查看>>
windows 系统的copy命令
查看>>