核心思想:氣泡排序是一種典型的 交換排序 ,通過比較相鄰元素大小來決定是否交換位置
氣泡排序的思想:不停地比較相鄰的兩個記錄,如果相鄰的兩個記錄的次序是反序則交換,直到所有的記錄都已經排好序了(使關鍵字最小或最大的記錄如氣泡一般逐漸往上「漂浮」直至「水面」,所以叫氣泡排序)。
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
(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 六種常用排序方法 空間複雜度產生的原因有兩個 重新定義了一塊空間用於儲存資料 遞迴產生了棧空間 氣泡排序 選擇排序 堆排序和插入排序屬於原地實現排序,因此空間複雜度為常數級別 快速排序,在演算法中雖然沒有使用...