n*n

冒泡排序:

# O(n^2)
列表每两个相邻的数,如果前面的比后面大,则交换这两个数
一趟排序完成后,则无序区减少一个数,有序区增加一个数
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]
li = [random.randint(0, 100) for i in range(10)]
print(li)
bubble_sort(li)
print(li)
# 改进的地方:如果一次排序列表没变,则认为已经排好序了
import random
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
li = [random.randint(0, 100) for i in range(10)]
print(li)
bubble_sort(li)
print(li)    

 

选择排序

# 时间复杂度O(n^2)
# 没有优化方法

 

插入排序

# 随便从无序插入到有序(按位置排好)        扑克摸排O(n^2)
def insert_sort(li):
    for i in range(1, len(li)):
        tmp = li[i]
        j = i - 1
        while j >= 0 and li[j] > tmp:
            li[j + 1] = li[j]
            j -= 1
        li[j + 1] = tmp
li = [3, 2, 4, 1, 5, 7, 9, 6, 8]
insert_sort(li)
print(li)

 

posted @ 2018-12-16 20:14  慕沁  阅读(657)  评论(0)    收藏  举报