python 排序算法

冒泡排序

算法思想: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
相關文章
相關標籤/搜索