冒泡排序
把第一個元素與第二個元素比較,如果第一個比第二個大,則交換他們的位置。接着繼續比較第二個與第三個元素,如果第二個比第三個大,則交換他們的位置….
我們對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣一趟比較交換下來之後,排在最右的元素就會是最大的數。
除去最右的元素,我們對剩餘的元素做同樣的工作,如此重複下去,直到排序完成
如圖所示:
代碼如下:
/**
* 冒泡排序
*/
@Test
public void bubbleSort(){
// 先輸出未排序之前的數組
System.out.println("未排序數組:");
printArray();
for (int i = 1; i < originArray.length; i++) {
// 當前序列已排序好的標記
boolean flag = true;
for (int j = 0; j < originArray.length-i; j++) {
// 每一輪選取一個最大的數
if (originArray[j]>originArray[j+1]){
// 值的交換
int temp = originArray[j];
originArray[j] = originArray[j+1];
originArray[j+1] = temp;
flag = false;
}
}
if (flag){
break;
}
// 打印數據
System.out.print("第"+i+"輪排序:");
printArray();
}
}
性質
1、時間複雜度:O(n2) 2、空間複雜度:O(1) 3、穩定排序 4、原地排序