• 插入排序


    a = [5,4,3,2,1]
     

    1. 从第一个元素开始,该元素可以认为已经被排序

    2. 取出下一个元素,在已经排序的元素序列中从后向前扫描

    3. 如果该元素(已排序)大于新元素,将该元素移到下一位置

    4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

    5. 将新元素插入到该位置后

    6. 重复步骤2~5

    1:1位置开始比较,和他前面所有的数字进行比较,4和5比较,4<5所以4,5交换位置
    [4,5,3,2,1]
     
    2:2位置开始比较,和他前面所有的数字进行比较
    4 3 5 2
    3 4 5 2
     
    3:3位置开始比较,和他前面所有的数字进行比较
    3 4 5 2
    3 4 2 5
    3 2 4 5
    2 3 4 5
     
    排好序了。
    依次把1坐标以后的所有元素,分别与它前面的元素进行比较
    如果发生了小于的情况就插入。
     
    原理:每次有一个数,它的前面都是排好序的,然后它要插入到
    排好的序列中,插入排序
     
     

    a=[3,6,1,8,4]
    '''
    1 [3][6] [3,6,1,8,4]
    2 [3][6,1] [1,6,3]
    3 [1][6,3,8] [1,6,3,8,4]
    4 [1][6,3,8,4] [1,6,3,8,4]------>最小值排到了第一位,以此类推

    [1,6,3,8,4]
    1 [6][3] [3,6,8,4]
    2 [3][6,8] [3,6,8,4]
    3 [3][6,8,4] [3,6,8,4]----->[1,3,6,8,4]


    [1,3,6,8,4]
    1 [6][8] [6,8,4]
    2 [6][8,4] [4,8,6]------>[1,3,4,8,6]


    [1,3,4,8,6]
    1 [8][6] [6,8]------------->[1,3,4,6,8]

    '''

    a = [7,3,9,1]
    #表示从坐标1开始,到列表最后一个元素的坐标结束,进行操作
    for i in range(1,len(a)):
        print("****",i)
        #所有i坐标的元素需要依次和它前面的所有元素进行比较
        for j in range(i,0,-1):
            print(a[j])
            #如果发生了相邻的两个元素小于的情况,则交换位置
            if a[j]<a[j-1]:
                a[j],a[j-1]=a[j-1],a[j]
            #否则结束当前的循环,开始下一个元素的比较循环。
            else:
                break
    
    
    print(a)
    插入时间复杂度:
    n^2
    稳定:稳定排序
     
     
     
    方法二:
    def insertion_sort(arr):
        """插入排序"""
        # 第一层for表示循环插入的遍数
        for i in range(1, len(arr)):
            # 设置当前需要插入的元素
            current = arr[i]
            # 与当前元素比较的比较元素
            pre_index = i - 1
            while pre_index >= 0 and arr[pre_index] > current:
                # 当比较元素大于当前元素则把比较元素后移
                arr[pre_index + 1] = arr[pre_index]
                # 往前选择下一个比较元素
                pre_index -= 1
            # 当比较元素小于当前元素,则将当前元素插入在 其后面
            arr[pre_index + 1] = current
        return arr
    
    
    insertion_sort([11, 11, 22, 33, 33, 36, 39, 44, 55, 66, 69, 77, 88, 99])
    
    
    
    
    # 返回结果[11, 11, 22, 33, 33, 36, 39, 44, 55, 66, 69, 77, 88, 99]
  • 相关阅读:
    在預設設定下,SQL Server 不允許遠端連接
    windows7语言包安装失败
    使一个销售组织能够销售另一个销售组织的产品
    转:多线程六种多线程方法解决UI线程阻塞
    转:BeginInvoke和EndInvoke方法 (原网址:http://www.cnblogs.com/nokiaguy/archive/2008/07/13/1241817.html)
    员工客户的统驭科目不能更改?
    公司间采购的退货(有序列号)
    排程 经典图示
    取消凭证分解 (取消公司下的多个利润中心)
    查找已删除的交货单信息
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11803439.html
Copyright © 2020-2023  润新知