冒泡排序,选择排序,插入排序

简介: 冒泡排序,选择排序,插入排序

冒泡排序

时间复杂度 O(n2)


# 冒泡排序
#   列表每相邻的数,如果前面比后面大,则交换这两个数
#   一趟排序完成后,则无序区减少一个数,有序增加一个数
import random
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]
# 优化
# 当数据不再交换的时候,排序已经完成,就可以结束循环,减少时间
from cal_time import cal_time
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
# 测试
# 使用random随机模块
# 列表生成式
li =[random.randint(1,10000) for i in range(1000)]
print(li)
bubble_sort(li)
print(li)
lit = list(range(10000))
# random.shuffle(lit) 打乱列表
random.shuffle(lit)
bubble_sort(lit)


选择排序

时间复杂度 O(n2)


# 选择排序
# 简陋写法
# 确定,时间复杂度高,空间复杂度高 非原地排序
import random
def select_sort_simple(li):
    li_new = []
    for i in range(len(li)):
        min_val = min(li)
        li_new.append(min_val)
        li.remove(min_val)
    return li_new
# 优化
# 算法关键: 有序区和无序区, 记录无序区最小数的位置
def select_sort(li):
    for i in range(len(li)-1):
        min_loc = i
        for j in range(i+1,len(li)):
            if li[j] < li[min_loc]:
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]
lit = list(range(10000))
# random.shuffle(lit) 打乱列表
random.shuffle(lit)
select_sort(lit)


插入排序

时间复杂度 O(n2)


# 插入排序 时间复杂度为O(n*n)
'''
将所有的元素看成扑克牌,选则排序就象对摸到的扑克牌进行排序一样, 第一个元素看成底牌,后面的元素为未知的
每次摸一张牌 从右向左依次比较,当所摸得牌大于比较所比较的牌 将摸到的牌放在所比较的牌的右面
当所摸得牌小于比较所比较的牌,所比较的牌向右移动一个位置,腾出位置,然后继续进行比较,
'''
import random
from cal_time import *
@cal_time
def insert_sort(li):
    for i in range(1, len(li)):
        tmp = li[i]
        j = i-1
        # 找插入的位置
        # 从右往左比较,如果tmp小于l[j],l[j]他的位置就向右移一个位置,
        while j >= 0 and li[j] > tmp:
            li[j+1] = li[j]
            j = j-1
        li[j+1] = tmp
li = [1,5,9,6,4,9,4,5,5,9,4,6]
insert_sort(li)
print(li)
lit = list(range(10000))
# random.shuffle(lit) 打乱列表
random.shuffle(lit)
insert_sort(lit)


相关文章
|
5月前
|
算法 搜索推荐 C++
C++017-C++冒泡排序与插入排序
C++017-C++冒泡排序与插入排序
C++017-C++冒泡排序与插入排序
|
7月前
冒泡排序和选择排序
冒泡排序和选择排序
|
11月前
|
存储 搜索推荐 Java
【排序算法】冒泡排序、选择排序、插入排序
【排序算法】冒泡排序、选择排序、插入排序
79 0
【排序算法】冒泡排序、选择排序、插入排序
|
11月前
|
算法 搜索推荐
冒泡排序与选择排序详解
冒泡排序与选择排序详解
|
12月前
|
搜索推荐
冒泡排序,选择排序,直接插入排序
🐰冒泡排序 🐰选择排序 🐰直接插入排序
|
算法 搜索推荐 索引
03_1排序算法:冒泡排序、选择排序、插入排序
03_1排序算法:冒泡排序、选择排序、插入排序
134 0
03_1排序算法:冒泡排序、选择排序、插入排序
冒泡排序、插入排序、选择排序
冒泡排序、插入排序、选择排序
|
搜索推荐 算法 JavaScript
|
搜索推荐 算法
排序算法-冒泡排序和选择排序
排序算法-冒泡排序和选择排序
排序算法-冒泡排序和选择排序