public class Sort { public static void main(String[] args) { int[] arr = new int[]{4, 1, 5, 3, 8, 2, 7, 9, 6}; Sort sort = new Sort(); //sort.selectSort(arr); //sort.bubbleSort(arr); //sort.insertSort(arr); sort.quickSort(arr, 0, arr.length - 1); for (int i : arr) { System.out.print(i + "\t"); } } /** * 選擇排序: * 假設第一個爲最小值,將其與後面的數依次比較,找出真正最小的值並標記位置 * 將最小值與原來的最小值位置互換,開始第二輪假設 */ public void selectSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int min = arr[i]; int minIndex = i;//記錄最小值的人下標 for (int j = i + 1; j < arr.length; j++) { if (arr[j] < min) { min = arr[j]; minIndex = j; } } if (minIndex != i) { int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } } /** * 冒泡排序 * 從後往前冒出每一輪比較的最小值 */ public void bubbleSort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = arr.length - 1; j >= i; j--) { if (arr[j] < arr[j - 1]) { int temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } } } } /** * 插入排序 * 將下一個元素插入到前面已經排好的隊列中 * 將下一個元素與前面隊列的元素一一比較交換至合適的位置 */ public void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = i - 1; j >= 0; j--) { if (arr[j + 1] < arr[j]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } else { break; } } } } /** * 快速排序 * 通過一趟排序將要排序的數據分割成獨立的兩個部分, * 一部分的所有數據都小於某個值,另一部分所有的數據都大於某個值, * 然後按照此方法對這兩部分的數據分別進行快速排序,整個排序的過程可以遞歸進行, * 以此將整個數據變成有序的序列。 * a:先從數列中取出第一個數作爲基準數。 * b:分區過程中,小於或者等於它的數放在它的左邊,將比這個數大的數全放在它的右邊, * c:再對左右區間重複第二步,直到各個區間只有一個數。 */ public void quickSort(int[] arr, int start, int end) { if (start >= end) { return; } int i = start; int j = end; int temp = arr[i]; while (i != j) { while (i < j && arr[j] >= temp) { j--; } if (i < j) { arr[i] = arr[j]; } while (i < j && arr[i] <= temp) { i++; } if (i < j) { arr[j] = arr[i]; } } arr[i] = temp; quickSort(arr, start, i - 1); quickSort(arr, i + 1, end); } }
選擇排序~冒泡排序~插入排序~快速排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.