氣泡排序由淺入深詳細分析圖解
阿新 • • 發佈:2019-01-08
package july.star.bubble; /** * 氣泡排序 * 相鄰元素兩兩比較,大的往後放,第一次完畢後,最大值就出現在 * 最大索引處,同理,繼續,即可得到一個排序好的陣列 * * 規律: * 1、兩兩比較,大的往後放。 * 2、第一次比較完畢後,下一次比較的時候就會減少一個元素的比較 * 3、第一次比較,有0個元素不比 * 第二次比較,有1個元素不比 * 第三次比較,有2個元素不比 * 第四次比較,有3個元素不比 * ..... * 4、總共需要比較陣列的長度-1次 * @author MoXingJian * @email
[email protected] * @date 2016年12月24日 下午3:44:30 * @version 1.0 */ public class BubbleSort { public static void main(String[] args) { int[] arr = {21,69,90,55,12}; //輸出陣列 printArr(arr); //詳細排序過程 detailSort(arr); int[] arr2 = {23,59,34,88,2,99,68}; //最終版 endSort(arr2); } private static void endSort(int[] arr2) { System.out.println(); System.out.println("原序列"); printArr(arr2); //兩次for迴圈解決 for(int i = 0; i < arr2.length-1; i++){ for(int j=0; j < arr2.length-1-i;j++){ if(arr2[j] > arr2[j+1]){ int temp = arr2[j]; arr2[j] = arr2[j+1]; arr2[j+1] = temp; } } } System.out.println(); System.out.println("兩層迴圈排序"); printArr(arr2); } private static void detailSort(int[] arr) { System.out.println(); System.out.println("第一次排序:"); //第一次排序 //arr.length-1 為了防止資料越界 //arr.length-1-0:為了減少比較的次數 for(int i=0; i < arr.length-1-0; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); System.out.println(); System.out.println("第二次排序:"); //第二次排序 for(int i=0; i < arr.length-1-1; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); System.out.println(); System.out.println("第三次排序:"); //第三次排序 for(int i=0; i < arr.length-1-2; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); System.out.println(); System.out.println("第四次排序:"); //第四次排序 for(int i=0; i < arr.length-1-3; i++){ if(arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } printArr(arr); } //輸出陣列 private static void printArr(int[] arr) { System.out.print("["); for(int j = 0; j < arr.length; j++){ if(j != arr.length-1){ System.out.print(arr[j] + ","); }else{ System.out.print(arr[j]); } } System.out.print("]"); } }