91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Java排序算法之怎么實現快速排序的三數取中法

發布時間:2021-11-04 17:28:47 來源:億速云 閱讀:214 作者:iii 欄目:開發技術

這篇文章主要講解了“Java排序算法之怎么實現快速排序的三數取中法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java排序算法之怎么實現快速排序的三數取中法”吧!

    基本步驟

    三數取中

    在快排的過程中,每一次我們要取一個元素作為樞紐值,以這個數字來將序列劃分為兩部分。在此我們采用三數取中法,也就是取左端、中間、右端三個數,然后進行排序,將中間數作為樞紐值。

    Java排序算法之怎么實現快速排序的三數取中法

    根據樞紐值進行分割

    Java排序算法之怎么實現快速排序的三數取中法

    Java排序算法之怎么實現快速排序的三數取中法 

    代碼實現

    package sortdemo;
    import java.util.Arrays;
    /**
     * Created by chengxiao on 2016/12/14.
     * 快速排序
     */
    public class QuickSort {
        public static void main(String[] args) {
            int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
            quickSort(arr, 0, arr.length - 1);
            System.out.println("排序結果:" + Arrays.toString(arr));
        }
        /**
         * @param arr
         * @param left  左指針
         * @param right 右指針
         */
        public static void quickSort(int[] arr, int left, int right) {
            if (left < right) {
                //獲取樞紐值,并將其放在當前待處理序列末尾
                dealPivot(arr, left, right);
                //樞紐值被放在序列末尾
                int pivot = right - 1;
                //左指針
                int i = left;
                //右指針
                int j = right - 1;
                while (true) {
                    while (arr[++i] < arr[pivot]) {
                    }
                    while (j > left && arr[--j] > arr[pivot]) {
                    }
                    if (i < j) {
                        swap(arr, i, j);
                    } else {
                        break;
                    }
                }
                if (i < right) {
                    swap(arr, i, right - 1);
                }
                quickSort(arr, left, i - 1);
                quickSort(arr, i + 1, right);
            }
        }
        /**
         * 處理樞紐值
         *
         * @param arr
         * @param left
         * @param right
         */
        public static void dealPivot(int[] arr, int left, int right) {
            int mid = (left + right) / 2;
            if (arr[left] > arr[mid]) {
                swap(arr, left, mid);
            }
            if (arr[left] > arr[right]) {
                swap(arr, left, right);
            }
            if (arr[right] < arr[mid]) {
                swap(arr, right, mid);
            }
            swap(arr, right - 1, mid);
        }
        /**
         * 交換元素通用處理
         *
         * @param arr
         * @param a
         * @param b
         */
        private static void swap(int[] arr, int a, int b) {
            int temp = arr[a];
            arr[a] = arr[b];
            arr[b] = temp;
        }
    }

    排序結果

    [1, 2, 3, 4, 5, 6, 7, 8]

    感謝各位的閱讀,以上就是“Java排序算法之怎么實現快速排序的三數取中法”的內容了,經過本文的學習后,相信大家對Java排序算法之怎么實現快速排序的三數取中法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

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

    AI

    霍林郭勒市| 彩票| 阿勒泰市| 印江| 漯河市| 金昌市| 互助| 甘泉县| 金阳县| 会昌县| 三门县| 武定县| 通许县| 巩留县| 凌云县| 临漳县| 惠安县| 彭阳县| 黄山市| 新龙县| 民乐县| 富阳市| 永顺县| 阿拉尔市| 融水| 北宁市| 武乡县| 徐州市| 五台县| 赤城县| 米泉市| 灵丘县| 观塘区| 黄冈市| 松阳县| 灵石县| 万宁市| 多伦县| 防城港市| 衡水市| 大悟县|