資料結構與演算法系列 排序 8 1 氣泡排序

2022-05-02 07:36:10 字數 1660 閱讀 1548

核心思想:氣泡排序是一種典型的 交換排序 ,通過比較相鄰元素大小來決定是否交換位置

氣泡排序的思想:不停地比較相鄰的兩個記錄,如果相鄰的兩個記錄的次序是反序則交換,直到所有的記錄都已經排好序了(使關鍵字最小或最大的記錄如氣泡一般逐漸往上「漂浮」直至「水面」,所以叫氣泡排序)。

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

(1)順序排列時,氣泡排序總的比較次數為n-1(比較一輪後就跳出迴圈),移動次數為0; 

(2)逆序排序時,氣泡排序總的比較次數為n(n-1)/2,移動次數為n(n-1)/2次; 

(3)當原始序列雜亂無序時,平均時間複雜度為o(n^2)。

若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數

和記錄移動次數

均達到最小值:

,。所以,氣泡排序最好的時間複雜度為

。若初始檔案是反序的,需要進行

趟排序。每趟排序要進行

次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:

。氣泡排序的最壞時間複雜度為

。綜上,因此氣泡排序總的平均時間複雜度為

。氣泡排序排序過程中,swap函式需要乙個臨時變數temp進行兩兩交換,所需要的額外空間為1,因此空間複雜度為o(1)。

氣泡排序在排序過程中,元素兩兩交換時,相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。

比較次數:

移動次數:

複雜度:    

排序趟數:

能歸位,每一趟排序有乙個元素歸位。

對於是否已經是有序排列進行判斷;

對已經排序好的元素不參與重複的比較。

public

int bubblesort1(int sourcearray) throws

exception }}

return

arr;}/*

*設定乙個標識,如果在某一趟遍歷中沒有發生交換,說明排序已經完成,即演算法完成

*/public

int bubblesort2(int sourcearray) throws

exception

}if(flagchange)

}return

arr;}//

set flag to indicate what next step should begin from

public

int bubblesort3(int sourcearray)

}if(flagchange)

}return

arr;

}

資料結構基礎學習筆記目錄

75-交換排序——氣泡排序

排序演算法系列之氣泡排序

氣泡排序

資料結構與演算法系列 氣泡排序高階

首先我們先把演算法給展示出來 如下 比較次數 交換次數 變數 注意,已經排好序的情況 param array private static voidsort intarray if flag system.out.print 第 i 1 論排序結果 display array 1 比較次數 交換次數...

演算法系列 氣泡排序

在我們的生活中,撲克牌應該是每乙個人的娛樂專案之一吧。在我們玩撲克牌的過程中,我們也可以體會到學習的奧秘。我們會根據手裡的牌,從小到大進行排序 即小的牌在前面,大的牌在後面 在這個過程中,我們可以體會並學習氣泡排序的神奇。氣泡排序 臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣...

資料結構 排序演算法系列總結

目錄 1 空間複雜度 2 穩定性 3 執行時間 4 目前預設的sort內建函式排序函式 5 六種常用排序方法 空間複雜度產生的原因有兩個 重新定義了一塊空間用於儲存資料 遞迴產生了棧空間 氣泡排序 選擇排序 堆排序和插入排序屬於原地實現排序,因此空間複雜度為常數級別 快速排序,在演算法中雖然沒有使用...