• [算法笔记]插入排序 InsertionSort


    插入排序是把待排序数据(从第二个元素开始)插入到已经排序好的数列中。

    基本方法:
    从第二个数开始(第一个数不用排序,直接作为基准比较元素),建立锚点,每一步将一个待排序(从第二个数开始),按其大小循环与前面已排好序的进行比较,插入到前面已经排好序的适当位置上去,直到最后一个元素全部插入为止,从小到大排序。

    def InsertionSort(arr):
        for i in range(1,len(arr)): # 从第2个元素开始,依次作为待排序元素
            print('第'+ str(i) + '次排序开始时:',arr)
            if arr[i] < arr[i-1]: # 小于前一元素,就等待插入到前面的位置
                temp = arr[i]
                for j in range(i,-1,-1): # 前面的元素大于待排序元素,就大数往后移动一位
                    if arr[j-1] > temp and j > 0:
                        arr[j] = arr[j-1]
                        print('第'+ str(i) + '次排序,第'+ str(j+1) + '位元素移动结束时:',arr)
                    else:
                        arr[j] = temp # 前面不存在更大数或者已经到第一位数,插入待排序元素
                        print('第'+ str(i) + '次排序,第'+ str(j+1) + '位元素移动结束时:',arr)
                        break
        return arr
    
    a = [2,8,4,6,1,9,7,5,0,3]
    print('插入排序结果为:',InsertionSort(a))
    
    ====================== RESTART: test.py ======================
    第1次排序开始时: [2, 8, 4, 6, 1, 9, 7, 5, 0, 3]
    第2次排序开始时: [2, 8, 4, 6, 1, 9, 7, 5, 0, 3]
    第2次排序,第3位元素移动结束时: [2, 8, 8, 6, 1, 9, 7, 5, 0, 3]
    第2次排序,第2位元素移动结束时: [2, 4, 8, 6, 1, 9, 7, 5, 0, 3]
    第3次排序开始时: [2, 4, 8, 6, 1, 9, 7, 5, 0, 3]
    第3次排序,第4位元素移动结束时: [2, 4, 8, 8, 1, 9, 7, 5, 0, 3]
    第3次排序,第3位元素移动结束时: [2, 4, 6, 8, 1, 9, 7, 5, 0, 3]
    第4次排序开始时: [2, 4, 6, 8, 1, 9, 7, 5, 0, 3]
    第4次排序,第5位元素移动结束时: [2, 4, 6, 8, 8, 9, 7, 5, 0, 3]
    第4次排序,第4位元素移动结束时: [2, 4, 6, 6, 8, 9, 7, 5, 0, 3]
    第4次排序,第3位元素移动结束时: [2, 4, 4, 6, 8, 9, 7, 5, 0, 3]
    第4次排序,第2位元素移动结束时: [2, 2, 4, 6, 8, 9, 7, 5, 0, 3]
    第4次排序,第1位元素移动结束时: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3]
    第5次排序开始时: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3]
    第6次排序开始时: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3]
    第6次排序,第7位元素移动结束时: [1, 2, 4, 6, 8, 9, 9, 5, 0, 3]
    第6次排序,第6位元素移动结束时: [1, 2, 4, 6, 8, 8, 9, 5, 0, 3]
    第6次排序,第5位元素移动结束时: [1, 2, 4, 6, 7, 8, 9, 5, 0, 3]
    第7次排序开始时: [1, 2, 4, 6, 7, 8, 9, 5, 0, 3]
    第7次排序,第8位元素移动结束时: [1, 2, 4, 6, 7, 8, 9, 9, 0, 3]
    第7次排序,第7位元素移动结束时: [1, 2, 4, 6, 7, 8, 8, 9, 0, 3]
    第7次排序,第6位元素移动结束时: [1, 2, 4, 6, 7, 7, 8, 9, 0, 3]
    第7次排序,第5位元素移动结束时: [1, 2, 4, 6, 6, 7, 8, 9, 0, 3]
    第7次排序,第4位元素移动结束时: [1, 2, 4, 5, 6, 7, 8, 9, 0, 3]
    第8次排序开始时: [1, 2, 4, 5, 6, 7, 8, 9, 0, 3]
    第8次排序,第9位元素移动结束时: [1, 2, 4, 5, 6, 7, 8, 9, 9, 3]
    第8次排序,第8位元素移动结束时: [1, 2, 4, 5, 6, 7, 8, 8, 9, 3]
    第8次排序,第7位元素移动结束时: [1, 2, 4, 5, 6, 7, 7, 8, 9, 3]
    第8次排序,第6位元素移动结束时: [1, 2, 4, 5, 6, 6, 7, 8, 9, 3]
    第8次排序,第5位元素移动结束时: [1, 2, 4, 5, 5, 6, 7, 8, 9, 3]
    第8次排序,第4位元素移动结束时: [1, 2, 4, 4, 5, 6, 7, 8, 9, 3]
    第8次排序,第3位元素移动结束时: [1, 2, 2, 4, 5, 6, 7, 8, 9, 3]
    第8次排序,第2位元素移动结束时: [1, 1, 2, 4, 5, 6, 7, 8, 9, 3]
    第8次排序,第1位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 8, 9, 3]
    第9次排序开始时: [0, 1, 2, 4, 5, 6, 7, 8, 9, 3]
    第9次排序,第10位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 8, 9, 9]
    第9次排序,第9位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 8, 8, 9]
    第9次排序,第8位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 7, 8, 9]
    第9次排序,第7位元素移动结束时: [0, 1, 2, 4, 5, 6, 6, 7, 8, 9]
    第9次排序,第6位元素移动结束时: [0, 1, 2, 4, 5, 5, 6, 7, 8, 9]
    第9次排序,第5位元素移动结束时: [0, 1, 2, 4, 4, 5, 6, 7, 8, 9]
    第9次排序,第4位元素移动结束时: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    插入排序结果为: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  • 相关阅读:
    phpmyadmin详细的图文使用教程
    从入门到深入FIDDLER 2
    TestNG学习-001-基础理论知识
    TestNG学习-002-annotaton 注解概述及其执行顺序
    自动化测试如何解决验证码的问题
    自动化测试 -- 通过Cookie跳过登录验证码
    JMeter学习-012-JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录
    自动化测试框架
    并发和并行概念及原理
    匿名内部实现多线程的两种方式创建
  • 原文地址:https://www.cnblogs.com/gisen_6/p/15704127.html
Copyright © 2020-2023  润新知