zoukankan      html  css  js  c++  java
  • LowB三人组:冒泡排序&选择排序&插入排序 (特点:原地排序,复杂度O(n²))

    冒泡排序:

    '''
    冒泡排序:时间复杂度O(n²)
    相邻两个数比较
    一趟冒一个最大(或最小)的数到最上面
    每一趟无序区减少一个数,有序区增加一个数
    '''
    
    def bubble_sort(li):
        for i in range(len(li) - 1):  # 冒泡n-1次排序完成
            flag = False
            for j in range(len(li) - 1 - i):  # 每次冒泡比较的次数
                if li[j] > li[j + 1]:
                    li[j], li[j + 1] = li[j + 1], li[j]
                    flag = True
            if not flag:
                return

     选择排序:

    '''
    选择排序:时间复杂度O(n²)
    分为无序区和有序区
    假设列表长度为n,一共n-1个值跟无序区的值比较(最后一个值不用比了),比较n-1次
    第一次拿列表第一个值和后面的值比较,找出最小的,跟索引0处的元素进行交换
    第二次拿列表第二个值和后面的值比较,找出最小的,跟索引1处的元素进行交换
    第三次拿列表第三个值和后面的值比较,找出最小的,跟索引3处的元素进行交换
    ...
    第n-1次拿列表第n-1个值后面的值比较,找出最小的,跟索引n-1处的元素进行交换
    这样下来,最后一个元素一定是最大的,就不管了
    '''
    li = [4, 5, 3, 6, 2, 7, 9, 8, 1]
    def select_sort(li):
        for i in range(len(li)-1):   # 取一个元素进行比较,共n-1个元素要进行比较
            min_loc = i     # 标记本趟最小值的索引,初始值为i
            for j in range(i+1, len(li)):  # 每一趟的比较找出最小值,跟第一个值交换,下次只跟后面的值比较
                if li[min_loc] > li[j]:   # 有比min_loc小的,就替换min_loc
                    min_loc = j
            li[i], li[min_loc] = li[min_loc], li[i]

     插入排序:

    '''
    插入排序:时间复杂度O(n²)
    类似摸牌,先拿列表第一个元素在手里
    从剩下的元素里依次取元素,依次跟手里的元素比较,
    如果比手里元素小,就挪动手中元素位置。
    最后把元素插入
    '''
    def insert_sort(li):
        for i in range(1, len(li)):  # i:摸到的牌的下标
            j = i - 1  # j:手里的最后一张牌的下标
            tmp = li[i]  # 用临时变量保存摸到的牌,因为移动位置会进行覆盖
            # 情况一:[2,4,6]  摸到3   j>=0
            # 情况二:[2,4,6]  摸到1   j=-1
            while j >= 0 and tmp < li[j]:  # 这个循环干的事情是挪动元素位置
                li[j + 1] = li[j]
                j -= 1
            li[j + 1] = tmp
  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/staff/p/11408521.html
Copyright © 2011-2022 走看看