• 排序算法LowB三人组(冒泡,选择,插入)


    冒泡排序

    时间复杂度:O(n2)

    • 列表每相邻的数,如果前比后大,则交换两个数
    • 一趟排序完成后,则无序区减少一个数,有序区增加一个数
    • 代码关键点:躺,无序区范围
    #升序
    def bubble_sort(li):
        for i in range(len(li)-1): #多少躺
            for j in range(len(li)-i-1): #下标指针
                if li[j] > li[j+1]:
                    li[j],li[j+1] = li[j+1],li[j]
            print(li) #打印每躺调试
    #降序
    def bubble_sort(li):
        for i in range(len(li)-1): #多少躺
            for j in range(len(li)-i-1): #下标指针
                if li[j] < li[j+1]:
                    li[j],li[j+1] = li[j+1],li[j]
            print(li) #打印每躺调试
    
    #改进
    def bubble_sort(li):
        for i in range(len(li)-1):
            exchange = False
            for j in range(len(li)-i-1):
                if li[j] > li[j+1]:
                    li[j],li[j+1] = li[j+1],li[j]
                    exchange = True
            if not exchange:
                return

     优点:原地排序,即不生成新列表,在原列表基础上进行交互,对内存友好

    选择排序

    时间复杂度:O(n2)

    • 一趟排序记录最小的数,放到第一个位置
    • 再一趟排序记录列表无序区最小的数,放到第二个位置
    • ...以此类推
    • 算法关键点:有序区和无序区,无序区最小数的位置
    #粗暴的按思路实现
    def select_sort_simple(li):
        list_new = []
        for i in range(len(li)):
            min_val = min(li)
            list_new.append(min_val)
            li.remove(min_val)
        return list_new
    

    缺点:需要新增一个列表list_new耗内存,min本身就是O(n)时间复杂度,remove同样也是O(n),总时间复杂度=O(n)套上两个O(n)约等于O(n2)

    #常规选择排序
    def select_sort(li):
        for i in range(len(li)-1): #i是第几趟
            min_loc = i
            for j in range(i+1,len(li)): #j是无序区
                if li[j] < li[min_loc]:
                    min_loc = j #找出无序区最小值下标
            li[i],li[min_loc] = li[min_loc],li[i]
    

    插入排序

    时间复杂度:O(n2)

    • 初始时手里(有序区)只有一张牌
    • 每次(从无序区)模一张牌,插入到手里已有牌的正确位置
    def insert_sort(li):
        for i in range(1,len(li)): #i表示摸到牌的下标
            tmp = li[i]
            j = i - 1 #j指的是手里的牌下标
            while j >= 0 and li[j] > tmp:
                li[j+1] = li[j]
                j = j - 1
            li[j+1] = tmp
    

      

  • 相关阅读:
    字符串中的空格
    魔方阵的构造
    程序填空题(一)
    程序填空题(二)
    QTP 自动化测试--点滴 等待
    QTP 自动化测试--点滴 获取datatable数值/dafault文件位置
    fiddler 笔记-重定向
    fiddler 笔记-设置断点
    QTP 自动货测试桌面程序-笔记-运行结果中添加截图
    Fiddler 学习笔记---命令、断点
  • 原文地址:https://www.cnblogs.com/hhs1998/p/16105306.html
Copyright © 2020-2023  润新知