標籤:sel i+1 冒泡排序 5.4 insert 插入排序 and while gpo
冒泡排序
1 def bubble_sort(li): 2 ‘‘‘本演算法複雜度為O(n**2)‘‘‘ 3 for i in range(len(li)-1):# 列表長度為n,需要n-1趟 4 ‘‘‘ 5 i的取值個數為n-1 6 i=0時,j的取值個數為n-1 7 i=1時,j的取值個數為n-1-1 8 i=2時,j的取值個數為n-1-1-1 9 故對於i,j的取值個數為n-1-10 ‘‘‘11 for j in range(len(li)-1-i):12 # 若後面的數小於前面數,則兩數前後交換13 if li[j] > li[j+1]:14 li[j],li[j+1] = li[j+1],li[j]15 li = [random.randint(0,10000) for i in range(10000)]16 print(li)17 bubble_sort(li)18 print(li)
選擇排序
# 選擇排序# 一趟排序記錄最小的數,放到第一個位置# 再一趟排序記錄記錄無序區最小的數,放到第二個位置# ......# 演算法關鍵的:有序區和無序區,無序去最小數的位置# 本演算法複雜度為O(n**2)def select_sort(li): for i in range(len(li)-1): # 需要排n-1趟 tmp = i # tmp用來記錄無序區最小的數的索引 for j in range(i+1,len(li)): ‘‘‘ j的範圍即無序區範圍 i=0時,j的範圍是1到最後 i=1時,j的範圍是2到最後 ...... ‘‘‘ if li[j]<li[tmp]: tmp=j li[i],li[tmp] = li[tmp],li[i]# li = [23,35,3,23,23,2,1,4,34,23,4,3,23,5,23,2,34,23,23,2,34,2,4534,6,7,4,6,8,3,42]# li = [random.randint(0,10000) for i in range(1000)]# print(len(li),li)# select_sort(li) # 用時0.053# print(li)# li = [random.randint(0,10000) for i in range(10000)]# print(len(li),li)# select_sort(li) # 用時6.057# print(li)
插入排序
本演算法時間複雜度也是O(n**2)
1 def insert_sort(li): 2 for i in range(1,len(li)): 3 tmp = li[i] 4 j = i-1# j指手裡的牌的下標 5 while j>=0 and li[j] > tmp: 6 li[j+1] = li[j] 7 j -= 1 8 li[j+1] = tmp 9 # li = [3,2,5,6,4,3,6,7,5,7,6,45,7,8,8,34]10 # print(insert_sort(li))11 li = [random.randint(0,10000) for i in range(1000)]12 print(li)13 insert_sort(li)# 0.04914 print(li)#15 16 li = [random.randint(0,10000) for i in range(10000)]17 print(li)18 insert_sort(li)# 5.4619 print(li)#
python演算法之排序演算法