#生產(chǎn)一個數(shù)字列表
import random
lst = [i for i in range(200)]
print(lst)
#將有序列表隨機(jī)打亂
random.shuffle(lst)
lst_shuf = lst
print(lst_shuf)
冒泡排序:相鄰的數(shù)兩兩比較赶诊,將較大的數(shù)排到后面,第一輪循環(huán)后最大的數(shù)沉到最后面
動圖演示:
代碼實現(xiàn)(時間復(fù)雜度O(n2)):
def bubble_sort(lst_shuf):
for i in range(len(lst_shuf)):
for j in range(1,len(lst_shuf)-i):
if lst_shuf[j] < lst_shuf[j-1]:
tmp = lst_shuf[j-1]
lst_shuf[j-1] = lst_shuf[j]
lst_shuf[j] = tmp
return lst_shuf
選擇排序:第一趟找出列表中最小的值放到隊首逸贾,第i趟找出lst_shuf[i:]中最小的值放到索引為i的位置
動畫演示:
代碼實現(xiàn):
def select_sort(lst_shuf):
for i in range(len(lst_shuf)-1):
min_index = i
tmp = lst_shuf[i]
#從i索引后面開始掃描是否有更小的值
for j in range(i+1,len(lst_shuf)):
if lst_shuf[j] > tmp:
continue
else:
#找到更小的值陨仅,記錄索引位置
min_index = j
tmp = lst_shuf[j]
#判斷最小值的索引是否發(fā)生變化津滞,發(fā)生變化則交換數(shù)據(jù)
if min_index != i:
lst_shuf[min_index] = lst_shuf[i]
lst_shuf[i] = tmp
return lst_shuf
插入排序:定義一個新的有序子列表lst_sort,從無序列表中pop一個元素灼伤,從后向前掃描据沈,按次序插入到lst_sort
動圖演示:
代碼實現(xiàn):
def insert_sort(lst_shuf):
lst_sort = []
# lst_sort.append(lst_shuf[-1])
for i in range(len(lst_shuf)):
tmp = lst_shuf.pop()
#插入第一個元素到有序列表
if len(lst_sort) ==0:
lst_sort.append(tmp)
continue
for j in range(len(lst_sort)):
#使用負(fù)數(shù)索引,從有序數(shù)列的最后位置向前掃描饺蔑,如果tmp更小則繼續(xù)向前掃描
if tmp < lst_sort[-1-j]:
if j == len(lst_sort) - 1: #最差的情況,從隊首插入
lst_sort.insert(-1 - j, tmp)
else:
continue
else:
if j == 0: #最好的情況從隊尾插入
lst_sort.append(tmp)
break
else:
lst_sort.insert(-1-j+1,tmp) #一般情況插入到-1-j位置的后面
break
return lst_sort