Guava集合--強大的集合工具類
阿新 • • 發佈:2020-07-17
氣泡排序,顧名思義,就是像氣泡一樣往上冒。
升序排序為例,從第一個數字開始,往向他後面的一個數字比較,如果前者大後者小,就交換,否則,不動,指標後移。依次類推
先來第一趟排序
用於示例的原始資料是:[5, 6, 1, 3, 4]
for (int i = 0; i < arr.length - 1; i++) { if (arr[i] > arr[i + 1]){ temp = arr[i]; arr[i] = arr[i + 1]; arr[i+1] = temp; } } System.out.println("第一趟排序後的結果:"); System.out.println(Arrays.toString(arr));
for (int j = 0; j < arr.length - 2; j++) { if(arr[j] > arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } System.out.println("第二趟排序的結果是"); System.out.println(Arrays.toString(arr));
依次類推,每次都能確定一個數,因為是升序,所以每次都能確定一個最大的數排到他該去的位置上,相對的,需要排序的元素個數也會減少
尋找規律可以得到氣泡排序的總方法:
public static int [] Bubblesort(int [] array){ int item; for (int i = 1; i < array.length; i++) { for (int j = 0; j < array.length - i; j++) { if (array[j] > array[j+1]) { item = array[j]; array[j] = array[j + 1]; array[j + 1] = item; } } } return array; }
優化:
那如果直接就給了一個有序的陣列呢,咋辦,還要一邊一邊的去比的話不是就浪費時間了嗎?
因此,提出氣泡排序的優化演算法,其實很簡單
定義一個flag初始值設為false,放到演算法的交換部分裡面去,如果進行了交換,就把值設定為true,說明進行過了比較,那就看flag就行了,如果從前往後比較,一個數都沒有交換,那麼OK,就是有序的陣列了已經,直接返回就行了。