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

冒泡排序

时间复杂度:O(n2)

  • 列表每相邻的数,如果前比后大,则交换两个数
  • 一趟排序完成后,则无序区减少一个数,有序区增加一个数
  • 代码关键点:躺,无序区范围
1
2
3
4
5
6
7
#升序
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) #打印每躺调试
1
2
3
4
5
6
7
#降序
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) #打印每躺调试
1
2
3
4
5
6
7
8
9
10
#改进
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)

  • 一趟排序记录最小的数,放到第一个位置
  • 再一趟排序记录列表无序区最小的数,放到第二个位置
  • ...以此类推
  • 算法关键点:有序区和无序区,无序区最小数的位置
1
2
3
4
5
6
7
8
#粗暴的按思路实现
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)

1
2
3
4
5
6
7
8
#常规选择排序
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)

  • 初始时手里(有序区)只有一张牌
  • 每次(从无序区)模一张牌,插入到手里已有牌的正确位置
1
2
3
4
5
6
7
8
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

  

posted @   SiNanhong  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示