zoukankan      html  css  js  c++  java
  • 希尔排序(python实现)

    历史

    希尔排序是1959年,Shell发明的,这是第一个突破O(n2)的排序算法,他与直接插入排序不同的是,他会优先比较距离较近的元素。因此,希尔排序又叫做缩小增量排序。

    原理

    其工作原理是定义一个间隔序列来表示排序过程中进行比较的元素之间有多远的间隔,每次将具有相同间隔的数分为一组,进行插入排序,大部分场景中,间隔是可以提前定义好的,也可以动态生成。
    希尔排序的实质就是分组的插入排序

    代码示例

    # shell sort
    def shell_sort(arr):
        # todo 定义间隔
        gap = len(arr) // 2
        while gap:
            # todo 需要两层循环,这个是外层选项
            for j in range(gap, len(arr)):
                i = j
                while j:
                    # 对比基准元素和 下标加tap元素,如果后面小,则交换,对比结束,gap 缩小重新赋值
                    if arr[i] < arr[i - gap]:
                        arr[i], arr[i - gap] = arr[i - gap], arr[i]
                    else:
                        break
                    # todo 最容易漏掉的一步,是的让此次外循环执行i次(组)的关键之处
                    i -= 1
            gap = gap // 2
        return arr
    

    结果验证

        res = shell_sort([1, 22, 3, 6, 9, 8, 4, 5, 22, 6, 17])
        [1, 3, 4, 5, 6, 6, 8, 9, 17, 22, 22]
    

    优缺点

    空间复杂度O(1), 平均时间复杂度O(nlogn) (优点)
    不稳定排序

    LESS IS MORE !
  • 相关阅读:
    CSS——实现图像远距离翻转效果
    《精通CSS》一个下拉菜单的例子
    将博客搬至CSDN
    44个Java代码性能优化总结
    QRCode 二维码生成
    Linux命令
    spring
    ajax 学习总结
    Servlet+Ajax实现搜索框智能提示代码
    搜索框智能提示
  • 原文地址:https://www.cnblogs.com/maxiaohei/p/14450227.html
Copyright © 2011-2022 走看看