八大基礎排序總結

總的來說:快速排序是用得比較廣泛的一個排序,也是經常出現的一個排序,應該重點掌握~
在這裏插入圖片描述

冒泡排序

    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上了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章