• 6.3 插入排序


    (1)插入排序:

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

    (2)插入排序分析:

      

       

    (3)代码实现:

     1 # 方法一:
     2 def insert_sort1(alist):
     3     """插入排序"""
     4     n = len(alist)
     5     for j in range(1, n):       # j的范围:1 ~ n-1
     6         i = j       # i代表内层循环的起始值,从右边的无序序列中取出一个元素,插入到前面的正确位置中
     7         while i > 0:
     8             if alist[i] < alist[i-1]:
     9                 alist[i], alist[i-1] = alist[i-1], alist[i]
    10                 i -= 1
    11             else:
    12                 break       # 插入算法的优化
    13 
    14 # 方法二:
    15 def insert_sort2(alist):
    16     # 从第二个位置,即下标为1的元素开始向前插入
    17     for i in range(1, len(alist)):
    18         # 从第i个元素开始向前比较,如果小于前一个元素,交换位置
    19         for j in range(i, 0, -1):
    20             if alist[j] < alist[j-1]:
    21                 alist[j], alist[j-1] = alist[j-1], alist[j]
    22 
    23 if __name__ == "__main__":
    24     li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    25     print(li)
    26     insert_sort1(li)
    27     print(li)
    28     print("-"*50)
    29 
    30     li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    31     print(li)
    32     insert_sort2(li)
    33     print(li)
    34     print("-"*50)

    (4)运行结果:

        

    (5)时间复杂度: 

        最优时间复杂度:O(n) (升序排列,序列已经处于升序状态)

        最坏时间复杂度:O(n2)

        稳定性:稳定

    (6)插入排序演示:

        

    文章写来不易,转载请标注。。。欢迎关注!
  • 相关阅读:
    第1周学习进度
    四则运算题1
    性能监控系统 | 从0到1 搭建Web性能监控系统
    数据库 | Oracle数据库查表空间使用情况
    性能测试 | 系统运行缓慢,CPU 100%,Full GC次数过多问题排查
    Markdown | 语法
    性能测试 | 理解单线程的Redis为何那么快?
    性能测试 | 理解分布式、高并发、多线程
    性能测试 | 常见的性能测试指标
    mysql 中varchar(50)最多能存多少个汉字
  • 原文地址:https://www.cnblogs.com/si-lei/p/9265190.html
Copyright © 2020-2023  润新知