• 技术文章 >Python技术 >Python基础教程

    python中如何进行希尔排序?

    宋雪维宋雪维2020-12-06 14:35:36原创2497

    如果问大家用于科学计算,属于插入类排序的缩小增量法是什么?你知道吗?其实是希尔排序法。 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会向大家向大家介绍python中的希尔排序及其使用代码。

    希尔排序

    背景:插入排序在小规模数据、数据基本有序时效率较高

    思想:将序列分为若干子序列进行插入排序,待序列基本有序时,对整体进行插入排序

    代码:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    # python实现希尔排序(插入排序的一种)

    # 先宏观进行调整,在进行微观调整

      

    def shellSort(lst, k, reverse=False):

        length = len(lst)

        dk = k # 设置一个增量dk

        while dk > 0:

            for i in range(dk, length):

                temp = lst[i]

                j = i

                while j >= dk and lst[j - dk] > temp:

                    lst[j] = lst[j - dk]

                    j -= dk

                lst[j] = temp

            dk = int(dk / 2)

        if reverse == False:

            return lst

        else:

            lst.reverse()

            return lst

    输出:

    1

    2

    3

    4

    5

    6

    test1 = [19, 21, 4, 6, 25, 3, 99, 67, 12]

    test2 = [19, 21, 4, 6, 25, 3, 99, 67, 12]

    data1 = shellSort(test1, 7)

    data2 = shellSort(test2, 2, True)

    print("从小到大:", data1)

    print("从大到小:", data2)

    希尔排序在最优时间复杂会根据步长序列的不同而不同,最坏时间复杂度是O(n^2),在操作过程中是不稳定的,要注意哦~

    专题推荐:python希尔排序编程
    上一篇:python all函数怎么用 下一篇:Python –如何将int转换为String

    相关文章推荐

    • python字典中values方法使用• python all函数怎么用• Python –如何将int转换为String

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网