一:氣泡排序的定義及其理解
氣泡排序是一種交換排序,它的基本思路是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。
氣泡排序其實很容易理解,顧名思義,我們會想到氣泡。就像水底下的魚兒嘴巴裡吐出的氣泡,越鄰近水平面上的氣泡是越大的。那如何用氣泡排序的方法對大小不一的氣泡進行排序呢?
氣泡排序**如下:
待排序記錄:67 23 23 29 10 41
第1趟比較過程
第一次比較:23 67 23 29 10 41
第二次比較:23 23 67 29 10 41
第三次比較:23 23 29 67 10 41
第四次比較:23 23 29 10 67 41
第五次比較:23 23 29 10 41 67
第2趟:23 29 10 34 41 67
第3趟:23 10 29 34 41 67
第4趟:10 23 29 34 41 67
二:演算法思路:
1:判斷排序記錄是否為空或排序記錄中是否只有乙個元素,如果是則返回該排序記錄。
2:比較相鄰的記錄,如果第乙個是否比第二個大,如果是則交換,不是則不交換,繼續比較第二個與第三個想念的記錄。如此迴圈直到比較到最後乙個記錄。這樣排序下來最後乙個記錄必然是整個排序記錄是的最大值。
3:除去上一趟排序過程中得到的最後一位最大值。對前面的記錄迴圈操作第2步。相應每趟序下來我們都可以得出此排序記錄中的最大值並將其交換到排序記錄的最後乙個記錄。
三:演算法實現:
public class code_bubblesort
for(int e=arr.length-1;e>0;e--)}}
}public static void swap(int arr,int i,int j)
public static void printarray(int arr)
for(int i=0;i
四:時間空間複雜度和穩定性
1:時間複雜度:乙個演算法流程中,常數運算元量的指標,這個指標叫做o,big o.具體為,如是常數運算元量的表示式中,只要高階項,不要低階項,也不要高階項係數之後,剩下的部分記 f(n),那麼該演算法的時間複雜度為o(f(n))。
常數操作相當於常數之間的定址操作,與排序的常數量無關。氣泡排序中,假設有同個排序記錄,第一趟排序是第乙個記錄與第二個記錄相互比較,反序交換。第二個記錄與第三個比較……..,直到第n-1位與第n位相互比較。總共比較次數為n次。依次類推,第二趟比較n-1次。第三趟比較n-3次…….最後一趟比較一次。將所有比較次數相加則為該演算法流程中的常數運算元量的總數。n+(n-1)+(n-2)+(n-3)+……+1=[n(n+1)]/2.所以氣泡排序的時間複雜度為o(n^2)。
2:空間複雜度(額外空間複雜度):程式中只用到有限的變數來輔助完成排序。所以氣泡排序的額外空間複雜度為o(1).
3:穩定性:對乙個排序記錄進行排序。如是最終排序結果中相同的記錄和原先未排序對比,其相對位置未發生變化。則此排序是穩定的。如上述氣泡排序**。兩個相同的23。未排序與排序完後,排序記錄中第乙個23與第二個23是永遠不會交換位置的。所以氣泡排序是穩定的。
資料結構與演算法之氣泡排序
氣泡排序作為演算法的入門程式,就好比程式語言裡面的hello world。核心思想就是將相鄰的兩個元素進行比較,如果順序錯誤就進行交換。給定一組資料 9,7,3,5,8,2,1。從第乙個數字9開始,將他與前面的數字7進行比較,大於7,然後兩個就交換位置,然後在用9去跟3做比較,大於3,同樣交換位置,...
資料結構與演算法之氣泡排序
勵志成為程式設計師的小白又來啦!這次要分享的是演算法中的幾種常用排序。首先這次我們要分享的是最經典的氣泡排序 氣泡排序 它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說...
資料結構與演算法之氣泡排序
1.什麼是氣泡排序 我自己的理解 相鄰的數字之間兩兩比較不斷的從右向左推選出最大 小 值的過程。特點就是一次只能在最右邊推舉出乙個最大 小 值,所以需要多次推舉 2.對上面的理解畫 釋一下,以陣列 3,4,1,5,2由小到大為例 測試結果 1,2,3,4,5 4.時間複雜度o n 2 證明一下 當外...