算法思想:python
一、相鄰元素對比,若是前面元素比後面的大,進行交換,直至最後一個元素,一輪結束以後,最後一個元素爲最大值;
二、後一輪進行的列表數量比前一輪少一個;
三、反覆進行上面兩步,直至沒有元素進行對比爲止.算法
複雜度:spa
冒泡排序的平均複雜度爲O(n2),當原列表爲正序排列時,複雜度爲O(n),爲倒序排列時,複雜度爲O(n2),比較次數爲n*(n-1)/2,關鍵字移動次數爲n*(n-1)/4blog
穩定性:排序
穩定。列表中每次交換是相鄰元素之間的交換,若是相鄰的兩個元素相等,不會出現交換狀況,於是相同元素的先後順序沒有發生改變,故而冒泡排序爲穩定排序算法io
代碼:class
def bubble_sort(array):
for i in range(len(array) - 1): # 這個循環負責設置冒泡排序進行的次數
for j in range(len(array) - i - 1):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j] #交換
return nums
算法思想:select
一、初始狀態中有序序列爲空,無序序列爲列表長度;
二、將第一個元素與其他元素對比,若是第一個元素大於第二個元素,將min下標替換爲第二個元素,依此類推,獲取最小元素的下標,與i替換;
三、此時有序序列爲1,無序序列列表長度-1;
四、將剩餘的無序序列反覆進行第二步,直至無序序列爲1;循環
複雜度:sort
選擇排序的平均複雜度爲O(n2)。每進行一輪操做,最多交換一次,所以交換操做介於0與n-1之間,比較操做次數爲n*(n-1)/2
穩定性:
不穩定。一個list,若是第一個元素與第四個元素相同,進行比較時,最小元素在第四個元素以後,第一個元素與最小元素交換,此時兩個相等的元素已經失去原有的先後順序,故不穩定。好比列表[3,9,7,3,4,1,2],爲了方便理解,在列表後面添加對應的下標[3(0),9(1),7(2),3(3),4(4),1(5),2(6)],列表無序,將第一個元素與其餘元素作對比,發現元素值爲1,下標爲5爲最小值,所以將3(0)與1(5)進行交換,獲得的序列結果爲[1(5),9(1),7(2),3(3),4(4),3(0),2(6)],因而可知,兩個相同的元素3,順序發生了改變,故而不穩定。
代碼:
def selection_sort(list2):
for i in range(0, len (list2)-1):
min_ = i
for j in range(i + 1, len(list2)):
if list2[j] < list2[min_]:
min_ = j
list2[i], list2[min_] = list2[min_], list2[i] # swap