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
  • 相关阅读:
    Win10 VMware虚拟机无法打开内核设备“\.Globalvmx86“
    搜索算法总结
    经典排序算法
    Markdown Test
    PAT L2-020 功夫传人【BFS】
    PAT l2-018 多项式A除以多项式B 【多项式+模拟】
    PAT l2-010 排座位 【并查集】
    二叉树的前中后序遍历关系 【非原创】
    PAT L2-005. 集合相似度 【stl set】
    PAT L2-004. 这是二叉搜索树吗?【前序遍历转化为后序遍历】
  • 原文地址:https://www.cnblogs.com/staff/p/11408521.html
Copyright © 2011-2022 走看看