1defbubble_sort(li):
2'''
本演算法複雜度為o(n**2)
'''3
for i in range(len(li)-1):#
列表長度為n,需要n-1趟
4'''
5i的取值個數為n-1
6i=0時,j的取值個數為n-1
7i=1時,j的取值個數為n-1-1
8i=2時,j的取值個數為n-1-1-1
9故對於i,j的取值個數為n-1-
10'''
11for j in range(len(li)-1-i):12#
若後面的數小於前面數,則兩數前後交換
13if 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)]
16print
(li)
17bubble_sort(li)
18print(li)
#選擇排序
#一趟排序記錄最小的數,放到第乙個位置
#再一趟排序記錄記錄無序區最小的數,放到第二個位置
#......
#演算法關鍵的:有序區和無序區,無序去最小數的位置
#本演算法複雜度為o(n**2)
defselect_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]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)
1definsert_sort(li):
2for i in range(1,len(li)):
3 tmp =li[i]
4 j = i-1#
j指手裡的牌的下標
5while j>=0 and li[j] >tmp:
6 li[j+1] =li[j]
7 j -= 1
8 li[j+1] =tmp9#
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)]
12print
(li)
13 insert_sort(li)#
0.049
14print(li)#
1516 li = [random.randint(0,10000) for i in range(10000)]
17print
(li)
18 insert_sort(li)#
5.46
19print(li)#
Python排序演算法之氣泡排序
顧名思義,氣泡排序直觀的意思是氣泡越大冒的越快 對應到我們的列表中就是數字最大的先選出來,然後依次進行。例如 mylist 1,4,5,0,6 比較方式為 相鄰的兩個數字先進行比較,也就是mylist 0 和mylist 1 發現不是 的關係,就繼續比較mylist 1 和mylist 2 依次進行...
排序演算法之python氣泡排序
氣泡排序是一種交換排序 比較相鄰的連個關鍵字,把大的往後放,小的就向前移動,即冒泡 def bubblesort input list 如果待排序列為空,則直接返回空列表 if len input list 0 return sorted list input list for i in range...
排序演算法之python希爾排序
希爾 shell 排序是一種插入排序,同時也叫縮小增量排序,算是直接插入排序的乙個優化演算法,以其設計者希爾 donald shell 的名字命名,該演算法由 1959 年公布。將待排序列以一定的步長分成子串行,把子序列進行排序,然後會繼續以更小的步長進行分子序列,並將子串行排序,最終演算法以步長為...