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)