演算法 氣泡排序

2021-07-03 05:10:17 字數 1812 閱讀 1353

頻繁的交換操作:一趟排序,多次交換運算;

基本操作:交換運算;

集合始終都是完整的。

一趟排序,通過與相鄰元素交換操作,把最大值移到最右邊的目標位置。

過程:下標0開始與相鄰元素比較,大於相鄰元素則交換,直到對比到最右邊元素,一趟排序停止,目標位置下標減一,繼續由下標0開始,目標位置下標為0,整個排序終止。

氣泡排序過程圖

**實現

public

class

bubblingsort

;// bubblingsort(ints, ints.length - 1);

bubblingsort2(ints);

for (int i : ints)

}/**

* 遞迴方式實現氣泡排序

** @param ints

* @param target

* @return

*/public

static

int bubblingsort(int ints, int

target)

/**一次冒泡把最大值移到最右邊位置*/

for (int i = 0; i < target; i++)

}bubblingsort(ints, --target);

return ints;

}/**

* 不適用遞迴方式實現冒牌排序

*/public

static

void

bubblingsort2

(int ints)

}--targetindex;}}

}

介紹完氣泡排序,講解一下冒泡的時間複雜度氣泡排序的時間複雜度為o(n^2)

時間複雜度

計算方法1.一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。分析:隨著模組n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高。

氣泡排序的時間複雜度計算過程:

氣泡排序是一種用時間換空間的排序方法,最壞情況是把順序的排列變成逆序,或者把逆序的數列變成順序。在這種情況下,每一次比較都需要進行交換運算。舉個例子來說,乙個數列 5 4 3 2 1 進行冒泡公升序排列,第一次大迴圈從第乙個數(5)開始到倒數第二個數(2)結束,比較過程:先比較5和4,4比5小,交換位置變成4 5 3 2 1;比較5和3,3比5小,交換位置變成4 3 5 2 1……最後比較5和1,1比5小,交換位置變成4 3 2 1 5。這時候共進行了4次比較交換運算,最後1個數變成了數列最大數。第二次大迴圈從第乙個數(4)開始到倒數第三個數(2)結束。進行3次比較交換運算。……所以總的比較次數為 4 + 3 + 2 + 1 = 10次對於n位的數列則有比較次數為 (n-1) + (n-2) + ... + 1 = n (n - 1) / 2,這就得到了最大的比較次數而o(n^2)表示的是複雜度的數量級。舉個例子來說,如果n = 10000,那麼 n(n-1)/2 = (n^2 - n) / 2 = (100000000 - 10000) / 2,相對10^8來說,10000小的可以忽略不計了,所以總計算次數約為0.5 n^2。用o(n^2)就表示了其數量級(忽略前面係數0.5)。

氣泡排序演算法 C 氣泡排序演算法排序詳解

氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...

氣泡排序 氣泡排序演算法優化

常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...

排序演算法 氣泡排序

一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...