您的位置:首页 > 编程语言 > Python开发

排序算法之插入排序

2017-10-06 22:38 429 查看
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。



代码实现:

# coding = utf-8

def insert_sort(alist):

    # 计算列表长度

    length = len(alist)

    # 初始将第一个元素看成有序,后面无序

    for i in range(1, length):

        # 核心:取出的元素插入到前面有序的序列中,取出元素依次和有序序列中的所有元素比较

        for j in range(i, 0, -1):

            # 取出元素与前面的一个元素比较

            if alist[j - 1] > alist[j]:

                # 交换数据

                alist[j - 1], alist[j] = alist[j], alist[j - 1]

            else:

                break

        print("第{}次排序:".format(i), alist)

#最坏时间复杂度:1 + 2 + ... +n-1   次数n-1 O(n^2)

#最优时间复杂度:n-1 O(n)

#稳定性:稳定

if __name__ == "__main__":

    alist = [54, 36, 93, 17, 77, 31, 44, 55, 20]

    print("原始列表: ", alist)

    insert_sort(alist)

    print("最终列表:  ", alist)

程序运行结果:

原始列表:   [54, 36, 93, 17, 77, 31, 44, 55, 20]

第1次排序: [36, 54, 93, 17, 77, 31, 44, 55, 20]

第2次排序: [36, 54, 93, 17, 77, 31, 44, 55, 20]

第3次排序: [17, 36, 54, 93, 77, 31, 44, 55, 20]

第4次排序: [17, 36, 54, 77, 93, 31, 44, 55, 20]

第5次排序: [17, 31, 36, 54, 77, 93, 44, 55, 20]

第6次排序: [17, 31, 36, 44, 54, 77, 93, 55, 20]

第7次排序: [17, 31, 36, 44, 54, 55, 77, 93, 20]

第8次排序: [17, 20, 31, 36, 44, 54, 55, 77, 93]

最终列表:   [17, 20, 31, 36, 44, 54, 55, 77, 93]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息