當前位置:成語大全網 - 書法字典 - 問Python問題

問Python問題

基本原理

從序列的頭部開始遍歷,每兩個進行比較,如果前者大於後者,則交換位置,最後將最大的數字(此排名中的最大數字)交換到無序序列的尾部,從而成為有序序列的壹部分;

在下壹次遍歷中,每次遍歷後的最大數將不再參與排序;

重復此操作幾次,直到序列排序完成。

因為在排序的過程中,小數總是被提出來,大數被放回去,這類似於氣泡逐漸向上漂浮,所以被稱為氣泡排序。

示意圖

Tips:藍色表示在壹輪分揀中等待兌換,黑色表示本輪分揀已完成兌換,紅色表示分揀已完成。

實現了鼓泡的分步分解。

使用for循環確定排序次數。

由於當只剩下壹個數字時,已經可以確定要排序的序列,因此沒有必要排序,因此排序次數為序列長度–1。

控制每次分類的比較時間。

每次排序時,序列中的多個數字要成對比較,需要使用for語句實現多次比較。for循環嵌套在排序時間的for循環中(形成嵌套的雙循環)。

提示:j需要設置為小於len-i-1。減去I的原因是排序後的數字不再參與比較,減去1的原因是數組下標索引值從0開始。

核心功能-相互比較並酌情交換位置。

比較兩個數的大小,如果前者大於後者,則交換值,即交換位置。

冒泡排序完整代碼

冒泡排序方法的優化

如果序列的數據為:【0,1,2,3,4,5】;

用上面的冒泡排序法排序,得到的結果肯定沒問題,但要排序的順序是有序的,理論上不需要遍歷排序。

當前算法無論初始序列是否有序都會遍歷排序,效率會很低,因此有必要對當前排序算法進行優化。

在下面的算法中,引入了壹個swap變量並將其初始化為false每次分揀前;如果發生兩位數交換,則將其設置為true。

每次排序結束時,判斷swap是否為假。如果是,則表示該序列已經排序或者該序列本身是壹個有序序列,不會進行下壹次排序。

通過這種方法,減少了不必要的比較和位置交換,進壹步提高了算法的性能。

氣泡分選法的效率

時間復雜性

最佳狀態:待排序序列為有序序列,根據優化後的代碼可以得到排序次數為n-1次,時間復雜度為O(n);

最壞的情況:要排序的序列順序相反,因此需要排序1+2+3...(n-1)= n(n-1)/2次。

時間復雜度為o(N2)。

空間復雜性

冒泡排序需要壹個額外的空間(temp變量)來交換元素的位置,因此空間復雜度為O(1)。

算法的穩定性

當相鄰元素相等時,不需要交換位置,因此相同元素的順序不會發生變化,因此是穩定排序。