頻繁的交換操作:一趟排序,多次交換運算;一趟排序,通過與相鄰元素交換操作,把最大值移到最右邊的目標位置。基本操作:交換運算;
集合始終都是完整的。
過程:下標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個中最...