亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java歸并排序和快速排序怎么實現

發布時間:2021-12-29 15:49:13 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

本篇內容介紹了“Java歸并排序和快速排序怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

歸并排序

// 歸并排序
    public static void mergeSort (int[] arr) {
        // 建一個臨時數據來存放數據
        int[] temp = new int[arr.length];
        mergeSort(arr, 0, arr.length - 1, temp);
    }
    private static void mergeSort(int[] arr, int left, int right, int[] temp) {
        if (left < right) { // 如果起始下標跟結束下標差值小于1,則不進行操作
            int mid = (left + right) / 2;
            mergeSort(arr, left, mid, temp); // 分組,將左邊分為一組,遞歸調用進行排序
            mergeSort(arr, mid+1, right, temp); // 將右邊分為一組
            merge(arr, left, mid, right, temp); //將左右分組合并
        }
    }
    private static void merge(int[] arr, int left, int mid, int right, int[] temp) {
        int i = left; // 定義左指針
        int j = mid + 1; // 定義右指針
        int t = 0; // 給temp臨時數組用的指針
        while (i <= mid && j <= right) { // 設置左右指針的移動邊界
            if (arr[i] <= arr[j]) { // 此處是升序,故誰小誰先賦給臨時數組
                temp[t++] = arr[i++];
            } else {
                temp[t++] = arr[j++];
            }
        }
        while (i <= mid) { // 如果左邊有剩余,則放在temp中
            temp[t++] = arr[i++];
        }
        while (j <= right) { // 如果右邊有剩余,依次放入temp中
            temp[t++] = arr[j++];
        }
        t = 0;
        // 此時temp中已經是arr數組中下標從left到right之間排好序的數據了,因為temp每次都是從0開始賦值,所以需將排好序的數放回arr的對應位置
        while (left <= right) {
            // 將left到right之間排好序的數據放回arr中,此時left到right之間的數就是最終排好序的數
            arr[left++] = temp[t++];
        }
    }

快速排序

// 快速排序
    public static void quickSort (int[] arr, int left, int right) {
        // 先將異常情況處理掉
        if (arr == null || arr.length < 2) {
            return;
        }
        if (right <= left) {
            return;
        }
        if (right - left == 1 && arr[left] <= arr[right]) {
            return;
        }
        // 取第一個數為基準數(基數取哪個都行,此處是為了方便)
        int index = arr[left];
        int i = left + 1; // 左指針
        int j = right; // 右指針
        while (i < j && i < right && j > left) { // 設置指針的移動邊界
            while (arr[j] > index && j > left) {j--;} // 找到從右邊數第一個比index小的數
            while (arr[i] < index && i < right) {i++;} // 找到從左邊數第一個比index大的數
            if (i < j) { // 交換這兩個數  如果i == j,說明二者定位到了同一個位置,則不用交換;如果i > j,說明二者已經相遇然后背向而行了,也不交換
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        // 執行完上面循環后,arr已經是左邊比index小,右邊比index大的數組了,只是基準數仍在基準位置left處,需放到它應該在的位置
        if (j != left && arr[j] != arr[left]) {
            // j最后停留位置的數,肯定是一個小于等于index的值,所以如果不是同一個位置的話,直接將二者調換一下位置即可
            int temp = arr[j];
            arr[j] = arr[left];
            arr[left] = temp;
        }
        quickSort(arr, left, j-1); // 將基準數左邊排序
        quickSort(arr, j+1, right); // 將基準數右邊排序
    }

“Java歸并排序和快速排序怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

古交市| 佛山市| 宣威市| 平远县| 姜堰市| 宁德市| 兖州市| 高淳县| 大关县| 鄄城县| 无为县| 尉犁县| 怀化市| 绥棱县| 苗栗市| 桂阳县| 黄骅市| 长葛市| 三穗县| 山东省| 天气| 印江| 靖远县| 密山市| 红安县| 临泽县| 贵阳市| 江口县| 临桂县| 宣恩县| 鸡西市| 桦甸市| 南投市| 来宾市| 龙泉市| 东丽区| 福泉市| 寻乌县| 峨边| 博罗县| 保亭|