天天看點

【資料結構與算法】排序算法的穩定性與冒泡排序的實作

持續更新,采用python進行示範,排序算法篇,包含冒泡排序,選擇排序,插入排序,希爾排序,歸并排序,快速排序。

資料與算法

1:資料結構:資料結構是一種特定的計算機儲存,組織資料的方式。宗旨是使計算機能夠高效的使用資料。

越強大的計算機 ------>越複雜的資料結構

2:抽象的資料類型(ADT):數列,清單樹,表格…

對于某一類型的戶數或者是某一個資料集的描述以及對該資料的各種操作。

ADTs擁有幹淨的接口,其具體的實施細節是封裝起來的

算法

算法:算法是能夠在有限時間内解決一系列問題的清晰指令

效率 1:時間 2:空間

目标

1:能夠識别程式要求的功能以解決目前的任務

2:設計能夠高效解決此任務的資料結構與算法

3:評價該方案的效率和正确性

思路 分析時間複雜度空間複雜度

排序算法

排序算法:是一種能将一串資料依照特定順序進行排列的一種算法。

【資料結構與算法】排序算法的穩定性與冒泡排序的實作

常見算法的效率比較:

【資料結構與算法】排序算法的穩定性與冒泡排序的實作

排序中最簡單的排序:冒泡排序

【資料結構與算法】排序算法的穩定性與冒泡排序的實作
【資料結構與算法】排序算法的穩定性與冒泡排序的實作

冒泡排序思想分析:

冒牌排序作為排序算法中最簡單的一種。冒泡顧名思義當一個氣泡從水中緩慢冒出的時候會慢慢變大,冒泡排序根據的就是這個思想。一個數組,通過循環的控制,将第一個數字與第二個數字進行比較,如果第一個數字比第二個數字大,那麼久交換位置,直到将數組的全部數字比較完。這個時候數組的最後一個數字就是這個數組對打的數字。根據這個思想,最後的數字動,上下的數字依次進行比較,進而達到排序效果

冒泡排序代碼實作

def bubble_sort(alist):    #第二個for循環就是從頭走到尾進行交換,第一個for循環就是讓第一個循環第一次交			   換之後從n-1變成n-2
    '''冒泡排序'''
    n=len(alist)
    for j in range(0,n-1):                                     #for i in range(5)輸出0,1,2,3,4
        for i in range(0,n-1-j):                              
           
            if alist[i]>alist[i+1]:
                alist[i],alist[i+1]=alist[i+1],alist[i]
                
# j=1 (0,n-1)   j=2 (0,n-1-1)    j=3 (0,n-1-1-1)                

if __name__=="__main__":
      li=[34,23,45,97,78,234,29]
      print(li)
      bubble_sort(li)
      print(li)                             
      
輸出:
[34, 23, 45, 97, 78, 234, 29]
[23, 29, 34, 45, 78, 97, 234]           

複制

就是每一次循環都把最大的數放在後面,前面的比後面大,就換位置,不然就繼續循環。

冒泡排序時間複雜度分析

【資料結構與算法】排序算法的穩定性與冒泡排序的實作