设为首页收藏本站
查看: 63|回复: 0

[PHP] 使用python实现8大排序算法-希尔排序

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2017-5-14 02:44:00 | 显示全部楼层 |阅读模式
    希尔排序的基本思想:
    希尔排序是基于插入排序的改进,由于插入排序对于已排好的数列操作时是高效的,但插入排序一般是比较低效的,因为一次只能移动一位。所以希尔排序先通过分组进行排序,直到分组增量为1 。
    例:
    arr = [49,38,04,97,76,13,27,49,55,65],分组增量为5时,红色数为一组,进行插入排序,依次循环遍历
    arr = [13,38,04,97,76,49,27,49,55,65],遍历完成后,分组增量自减,
    arr = [13,27,04,55,65,49,38,49,97,76],再继续对分组增量为2的组进行插入排序,直到分组增量为1
    代码:
    Python代码
    def shell_sort(lists):
    #希尔排序
    count = len(lists)
    step = 2
    group = count / step
    while group > 0: #通过group增量分组循环
    for i in range(0, group):
    j = i + group
    while j
    k = j - group
    key = lists[j]
    while k >= 0: #分组中进行插入排序
    if lists[k] > key:
    lists[k + group], lists[k] = lists[k], key
    else: break
    k -= group
    j += group
    group /= step
    return lists
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表