思路
- 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素;( 第一輪結束后,序列最后一個元素一定是當前序列的最大值;)
- 對序列當中剩下的n-1個元素再次執行步驟1。
- 對於長度為n的序列,一共需要執行n-1輪比較
時間復雜度
最佳情況:T(n) = O(n) 最差情況:T(n) = O(n2) 平均情況:T(n) = O(n2)
代碼
import java.util.Arrays;
/**
* 冒泡排序
* @author remainsu
* @version 1.0 2019-05-29
*/
public class BubbleSort {
/**
* 排序方法
* @param arr 要排序的數組
* @return toString 方便輸出
*/
public static String bubbleSort(int[] arr) {
int tmp;
//int count = 0;
// 冒泡次數
for(int a=0; a<arr.length-1; a++ ) {
//count = a+1;
boolean flag = false;
// 比較未移動的
for(int b=0; b<arr.length-a-1; b++ ) {
// 后面的小於前面的,則互換位置
if(arr[b+1] < arr[b]) {
tmp = arr[b];
arr[b] = arr[b+1];
arr[b+1] = tmp;
//有數據移動,則狀態標位true
flag = true;
}
}
//沒有數據移動,即數組已經有序,直接退出
if(!flag) break;
}
//System.out.println("冒泡的次數:"+ count);
return Arrays.toString(arr);
}
public static void main(String[] args) {
int[] arr = {111, 3, 5, 52, 74, 312, 75, 3, 764, 3, 2111, 7, 31};
//int[] arr = {1,2,10,3,4,5,6,7,8,9};
System.out.println("排序后的數組:"+ bubbleSort(arr));
}