冒泡排序(Bubble Sort)算法簡介:
冒泡排序是一種常見的交換排序。在這個過程中,數字會像泡泡一樣,慢慢從右往左“浮”到序列的頂端,所以這個算法才被稱爲“冒泡排序”。其基本思想是兩兩比較相鄰記錄,如果反序則交換,直到沒有反序的記錄爲止。
冒泡排序(Bubble Sort)算法原理:
例如我們有一個數組,我們需要把較小的元素排在前面,把較大的元素排在後面,那麼需要從尾部到頭部開始比較操作:
- 從尾部開始比較相鄰的兩元素,如果右邊元素左邊元素小,則交換兩元素位置;否則不作交換。
- 從後往前對每兩相鄰元素都做同樣的比較、交換操作,直到到達數組序列最左邊,此時序列中最小的數字會移動到最左端。
- 重新從尾部開始第 1、2 步的操作,除了在這之前頭部已經排好的元素。
- 繼續對越來越少的數據進行比較、交換操作,直到沒有可比較的數據爲止,排序完成。
舉例說明:
現在需要對數組序列 5 9 3 1 2 8 4 7 6 運用冒泡排序算法從小到大排序。從尾部起,一次比較兩個元素,如果反序則交換,否則不交換。
第一步:從尾向前,6<7,互換位置: 5 9 3 1 2 8 4 6 7
第二步:左移一位,6>4,不換位置: 5 9 3 1 2 8 4 6 7
第三步:左移一位,4<8,互換位置: 5 9 3 1 2 4 8 6 7
.................
第八步:左移一位,1<5,互換位置: 1 5 9 3 2 4 8 6 7
第1輪操作結束,序列中最小的數字就會移動到最左邊。重複上述操作直到序列中第二小的數字移動到第二位,第n小的數字移動到第n位。直到所有的數字都歸位爲止,則排序完成。
冒泡排序(Bubble Sort)代碼實現:
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int[] array= {5,9,3,1,2,8,4,7,6};
bubbleSort(array);
}
public static void bubbleSort(int[] array){
//外層循環,是需要進行比較的輪數,一共進行8次即可
for(int i=array.length-1;i>0;i--) {
//內存循環,是每一輪中進行的兩兩比較與交換
for(int j=array.length-1;j>array.length-i-1;j--) {
if(array[j-1]>array[j]) {
int temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
}
System.out.println("第"+(array.length-i)+"輪排序後的數組爲:"+Arrays.toString(array));
}
}
}
冒泡排序(Bubble Sort)的時間複雜度:
在冒泡排序中,第1輪需要比較n-1次,第2輪需要比較n-2,.....,第n-1輪需要比較1次。因此,總的比較次數爲(n-1)+(n-2) +...+1≈n²/2。這個比較次數恆定爲該數值,和輸入數據的排列順序無關。不過,交換數字的次數和輸入數據的排列順序有關。假設出現某種極端情況,如輸入數據正好以從小到大的順序排列,那麼便不需要任何交換操作;反過來,輸入數據要是以從大到小的順序排列,那麼每次比較數字後便都要進行交換。因此,冒泡排序的時間複雜度爲O(n²)。