總的來說:快速排序是用得比較廣泛的一個排序,也是經常出現的一個排序,應該重點掌握~
冒泡排序
public static void main(String[] args) {
int[] arrays = {2, 3, 4, 5, 1, 5, 2, 9, 5, 6, 8, 3, 1};
bubbleSort(arrays, 0, arrays.length - 1);
}
public static void bubbleSort(int[] arrays, int L, int R) {
int temp;
//如果只有一個元素了,那什麼都不用幹
if (L == R) ;
else {
for (int i = L; i < R; i++) {
if (arrays[i] > arrays[i + 1]) {
temp = arrays[i];
arrays[i] = arrays[i + 1];
arrays[i + 1] = temp;
}
}
//第一趟排序後已經將最大值放到數組最後面了
//接下來是排序"整體"的數據了
bubbleSort(arrays, L, R - 1);
}
}
選擇排序
插入排序
快速排序
/**
* 快速排序
*
* @param arr
* @param L 指向數組第一個元素
* @param R 指向數組最後一個元素
*/
public static void quickSort(int[] arr, int L, int R) {
int i = L;
int j = R;
//支點
int pivot = arr[(L + R) / 2];
//左右兩端進行掃描,只要兩端還沒有交替,就一直掃描
while (i <= j) {
//尋找直到比支點大的數
while (pivot > arr[i])
i++;
//尋找直到比支點小的數
while (pivot < arr[j])
j--;
//此時已經分別找到了比支點小的數(右邊)、比支點大的數(左邊),它們進行交換
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
//上面一個while保證了第一趟排序支點的左邊比支點小,支點的右邊比支點大了。
//“左邊”再做排序,直到左邊剩下一個數(遞歸出口)
if (L < j)
quickSort(arr, L, j);
//“右邊”再做排序,直到右邊剩下一個數(遞歸出口)
if (i < R)
quickSort(arr, i, R);
}
歸併排序
堆排序
希爾排序
基數排序(桶排序)
我也將代碼(包括分解過程)上傳到了GitHub上了