Algorithm 選擇、冒泡、插入排序
阿新 • • 發佈:2021-11-03
選擇排序
public static void selectSort(int[] arr){ //邊界判斷啊 if(arr == null || arr.length < 2 ){ return ; } int minIndex; //外迴圈是對1-n 取最小值,2-n 取最小值 for(int i = 0; i < arr.length-1; i++){ minIndex = i; for(int j = i+1; j<arr.length -1 ; j++){ //判斷 minIndex = arr[j] < arr[minIndex]? j : minIndex; } //交換 swap(arr, i, minIndex); } } //交換位置 public static void swap(int[] arr,int i,int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }
氣泡排序
public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } // 0 ~ N-1 // 0 ~ N-2 // 0 ~ N-3 //氣泡排序是優先將最大值先排好 for (int e = arr.length - 1; e > 0; e--) { // 0 ~ e for (int i = 0; i < e; i++) { //大的值往後放 if (arr[i] > arr[i + 1]) { swap(arr, i, i + 1); } } } } // 交換arr的i和j位置上的值 // 這種等同於tmp做中間變數的交換 public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; }
插入排序
public static void insertionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } // 不只1個數 for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序 //當j--後 j為-1時,代表這個小排序達成,跳出,進行接下來的排序 for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) { swap(arr, j, j + 1); } } } // i和j是一個位置的話,會出錯 public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; }