精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

排序算法:詳解快速排序

開發 前端
快速排序是一種高效的分治排序算法,由Tony Hoare在1960年提出。它的核心思想是"分而治之",通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,然后分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

快速排序介紹

快速排序是一種高效的分治排序算法,由Tony Hoare在1960年提出。它的核心思想是"分而治之",通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,然后分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

快速排序實現

一、工作原理

原始數組: [10, 7, 8, 9, 1, 5]
步驟1: 選擇基準元素(這里選擇最后一個元素5)
步驟2: 分區操作,將小于5的放在左邊,大于5的放在右邊
        [1, 5, 8, 9, 10, 7]  // 5已經在正確位置
步驟3: 遞歸排序左半部分[1]和右半部分[8, 9, 10, 7]
       左半部分[1]已經有序
       右半部分選擇基準7 → [7, 9, 10, 8] → 繼續遞歸...

二、分區過程詳解

分區是快速排序的核心操作,以最后一個元素為基準:

數組: [10, 80, 30, 90, 40, 50, 70]
基準: 70


分區過程:
i = -1, j = 0: 10 < 70 → 交換arr[++i]和arr[j] → [10, 80, 30, 90, 40, 50, 70]
i = 0,  j = 1: 80 > 70 → 不交換
i = 0,  j = 2: 30 < 70 → 交換 → [10, 30, 80, 90, 40, 50, 70]
i = 1,  j = 3: 90 > 70 → 不交換
i = 1,  j = 4: 40 < 70 → 交換 → [10, 30, 40, 90, 80, 50, 70]
i = 2,  j = 5: 50 < 70 → 交換 → [10, 30, 40, 50, 80, 90, 70]
最后交換基準: 交換arr[i+1]和arr[high] → [10, 30, 40, 50, 70, 90, 80]
基準70已經在正確位置!

算法特點

圖片圖片

代碼實現

一、基礎版(Lomuto分區方案)

public class QuickSortBasic {


    /**
     * 快速排序主方法
     */
    public static void quickSort(int[] arr) {
        if (arr == null || arr.length <= 1) {
            return;
        }
        quickSort(arr, 0, arr.length - 1);
    }


    /**
     * 遞歸快速排序
     * @param arr 待排序數組
     * @param low 起始索引
     * @param high 結束索引
     */
    private static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            // 分區操作,獲取基準元素的正確位置
            int pivotIndex = partition(arr, low, high);


            System.out.println("基準元素 " + arr[pivotIndex] + " 已就位,數組狀態: " 
                             + arrayToString(arr, low, high));


            // 遞歸排序左半部分
            quickSort(arr, low, pivotIndex - 1);
            // 遞歸排序右半部分
            quickSort(arr, pivotIndex + 1, high);
        }
    }


    /**
     * Lomuto分區方案
     * @return 基準元素的最終位置
     */
    private static int partition(int[] arr, int low, int high) {
        // 選擇最后一個元素作為基準
        int pivot = arr[high];
        System.out.println("分區: [" + low + "-" + high + "], 基準: " + pivot);


        // i指向小于基準的區域的邊界
        int i = low - 1;


        for (int j = low; j < high; j++) {
            // 如果當前元素小于或等于基準
            if (arr[j] <= pivot) {
                i++;
                swap(arr, i, j);


                if (i != j) {
                    System.out.println("  交換 " + arr[j] + " 和 " + arr[i] + 
                                     " → " + arrayToString(arr, low, high));
                }
            }
        }


        // 將基準元素放到正確位置
        swap(arr, i + 1, high);
        System.out.println("  基準就位: " + arrayToString(arr, low, high));


        return i + 1;
    }


    /**
     * 交換數組中的兩個元素
     */
    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }


    /**
     * 輔助方法:打印數組指定范圍
     */
    private static String arrayToString(int[] arr, int low, int high) {
        StringBuilder sb = new StringBuilder("[");
        for (int i = low; i <= high; i++) {
            sb.append(arr[i]);
            if (i < high) sb.append(", ");
        }
        sb.append("]");
        return sb.toString();
    }


    public static void main(String[] args) {
        int[] arr = {10, 7, 8, 9, 1, 5};
        System.out.println("原始數組: " + java.util.Arrays.toString(arr));
        System.out.println("開始快速排序:");


        quickSort(arr);


        System.out.println("排序結果: " + java.util.Arrays.toString(arr));
    }
}

二、優化版(Hoare分區方案+三數取中)

public class OptimizedQuickSort {


    /**
     * 優化版快速排序
     * 優化點1: 使用Hoare分區方案,減少交換次數
     * 優化點2: 三數取中法選擇基準,避免最壞情況
     * 優化點3: 小數組使用插入排序
     */
    public static void quickSortOptimized(int[] arr) {
        if (arr == null || arr.length <= 1) return;
        quickSortOptimized(arr, 0, arr.length - 1);
    }


    private static void quickSortOptimized(int[] arr, int low, int high) {
        // 小數組使用插入排序
        if (high - low + 1 <= 10) {
            insertionSort(arr, low, high);
            return;
        }


        if (low < high) {
            // 選擇基準并分區
            int pivotIndex = hoarePartition(arr, low, high);


            // 遞歸排序
            quickSortOptimized(arr, low, pivotIndex);
            quickSortOptimized(arr, pivotIndex + 1, high);
        }
    }


    /**
     * Hoare分區方案 - 更高效的分區方法
     */
    private static int hoarePartition(int[] arr, int low, int high) {
        // 三數取中法選擇基準
        int pivot = medianOfThree(arr, low, high);
        int i = low - 1;
        int j = high + 1;


        while (true) {
            // 從左向右找到第一個大于等于基準的元素
            do {
                i++;
            } while (arr[i] < pivot);


            // 從右向左找到第一個小于等于基準的元素
            do {
                j--;
            } while (arr[j] > pivot);


            // 如果指針相遇,返回分區位置
            if (i >= j) {
                return j;
            }


            // 交換元素
            swap(arr, i, j);
        }
    }


    /**
     * 三數取中法:選擇左、中、右三個數的中值作為基準
     */
    private static int medianOfThree(int[] arr, int low, int high) {
        int mid = low + (high - low) / 2;


        // 對三個數進行排序
        if (arr[low] > arr[mid]) swap(arr, low, mid);
        if (arr[low] > arr[high]) swap(arr, low, high);
        if (arr[mid] > arr[high]) swap(arr, mid, high);


        // 將中值放在high-1位置,返回中值作為基準
        swap(arr, mid, high);
        return arr[high];
    }


    /**
     * 插入排序,用于小數組
     */
    private static void insertionSort(int[] arr, int low, int high) {
        for (int i = low + 1; i <= high; i++) {
            int key = arr[i];
            int j = i - 1;


            while (j >= low && arr[j] > key) {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = key;
        }
    }


    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }


    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90, 5, 77, 30, 15, 42};
        System.out.println("原始數組: " + java.util.Arrays.toString(arr));


        quickSortOptimized(arr);


        System.out.println("排序結果: " + java.util.Arrays.toString(arr));
    }
}

使用建議

  1. 推薦使用:大規模數據排序、通用排序需求
  2. 避免使用:需要穩定排序的場景、對最壞性能要求嚴格的場景
  3. 優化重點:合理的基準選擇、處理小數組、避免最壞情況

快速排序以其優異的平均性能和緩存友好性,成為實際應用中最常用的排序算法之一!

責任編輯:武曉燕 來源: 小林聊編程
相關推薦

2011-04-20 15:20:03

快速排序

2021-01-26 05:33:07

排序算法快速

2014-10-30 15:14:54

快速排序編程算法

2021-03-04 07:24:28

排序算法優化

2017-11-22 14:20:07

前端JavaScript排序算法

2023-05-08 07:55:05

快速排序Go 語言

2014-03-03 16:44:57

算法

2023-03-07 08:02:07

數據結構算法數列

2021-01-21 05:22:36

排序算法選擇

2014-10-30 15:08:21

快速排序編程算法

2009-08-25 17:41:51

C#開發排序算法

2023-10-05 09:01:05

插入排序對象序列log2i

2010-01-11 15:01:55

VB.NET冒泡排序

2021-01-19 07:02:26

算法數據結構堆排序

2011-04-20 15:06:44

堆排序

2011-04-20 14:07:37

冒泡排序

2011-04-20 13:56:08

選擇排序

2011-04-20 14:19:00

希爾排序

2022-03-07 09:42:21

Go快速排序

2023-03-06 08:10:52

數據結構算法數據
點贊
收藏

51CTO技術棧公眾號

欧美mv日韩mv国产| 国产老女人乱淫免费| 亚洲欧洲视频在线观看| 国产一区二区精品久| 国产福利一区二区三区视频 | 日韩亚洲欧美视频| 91国产丝袜播放在线| 国产精品久久久久久久久免费高清| 国产乱码精品1区2区3区| 亚洲最大中文字幕| 浮妇高潮喷白浆视频| 精品国产伦一区二区三| 97精品国产| 欧美手机在线视频| 欧美伦理一区二区| 豆国产97在线 | 亚洲| 久久久久黄色| 亚洲一区二区在线播放相泽| 国产伦精品一区二区三区精品视频| 中国黄色片视频| av在线免费网站| 久久99高清| 黑丝美女久久久| 国产精品免费一区二区三区| 麻豆天美蜜桃91| 亚洲成人激情社区| 久久久久九九视频| 欧美一区二区三区精品电影| 国产极品一区二区| а√天堂中文在线资源8| 国产精品77777| 国产精品久久久久77777| 黄色片网站免费| 欧美大片1688网站| 国产精品国产自产拍高清av王其| 国产精品久久久久久久久久小说 | xxxx性欧美| www.色就是色| 韩国三级在线观看久| 久久高清国产| 亚洲人成电影在线| 天天干在线影院| 女厕盗摄一区二区三区| 26uuu国产一区二区三区| 国产成人精品午夜| 四虎永久免费地址| 日韩精品亚洲专区在线观看| 亚洲一区二区三区四区在线免费观看 | 色偷偷888欧美精品久久久| 国产高清视频网站| 精品欧美色视频网站在线观看| 精品一区二区精品| 欧美成人精品在线视频| yjizz视频| 一区二区三区在线资源| 精品毛片网大全| 亚洲精品日韩精品| 亚洲男女视频在线观看| 制服诱惑一区二区| 在线播放日韩av| 免费一级做a爰片久久毛片潮| 久久久加勒比| 制服丝袜亚洲色图| 久久久性生活视频| 成av人电影在线观看| 久久se精品一区精品二区| 欧美激情中文字幕在线| a级大片在线观看| 久久久久亚洲精品中文字幕| 欧美视频一区二区三区…| 午夜欧美性电影| 国产1区在线观看| 成人性生交大片免费看中文网站| 国产不卡av在线| 真实新婚偷拍xxxxx| 午夜激情一区| 亚洲精品国偷自产在线99热| 婷婷免费在线观看| 午夜影院一区| 亚洲综合久久久久| 亚洲欧洲三级| 在线āv视频| 欧美极品aⅴ影院| 精品一区在线播放| 99精品在线视频观看| 视频一区欧美精品| 97人人做人人爱| 四虎免费在线视频| 欧美猛男同性videos| 综合网中文字幕| 插吧插吧综合网| 动漫视频在线一区| 欧美情侣在线播放| 午夜dv内射一区二区| 77thz桃花论族在线观看| 最新国产精品久久精品| 性欧美精品一区二区三区在线播放 | 欧美黑人在线观看| 日本成人网址| 亚洲国产高清在线观看视频| 牛人盗摄一区二区三区视频| 污污网站在线免费观看| 国产色爱av资源综合区| 欧美日韩国产一二| 国产一二三区在线观看| 精品欧美国产一区二区三区| 五月天婷婷亚洲| 欧美日韩电影免费看| 精品免费在线观看| 91网址在线观看精品| 97久久中文字幕| 欧美精品久久天天躁| 在线观看岛国av| 青青操综合网| 亚洲老头同性xxxxx| 制服丝袜第二页| 日韩三级av| 亚洲精品中文字| 亚洲专区区免费| 欧美一区高清| 国产精品欧美一区二区三区奶水 | 成人a在线观看高清电影| 色网站国产精品| 久草综合在线观看| jizz18欧美18| 亚洲电影天堂av| 欧美大片免费播放器| 亚洲欧美成人vr| 亚洲精品中文字幕有码专区| 极品颜值美女露脸啪啪| 麻豆freexxxx性91精品| 91精品视频在线播放| 亚洲一级特黄毛片| 国产精品亚洲一区二区三区在线| 日本一区二区精品| av基地在线| 亚洲男同1069视频| 丰满少妇大力进入| 精品国产亚洲一区二区三区大结局| 国产一区二区免费| 日韩a级片在线观看| 午夜精品国产| 亚洲xxxx做受欧美| 日韩在线视频免费| 国产三级一区二区| 日本爱爱免费视频| 国产欧美日韩影院| 日产精品99久久久久久| 夜夜嗨aⅴ一区二区三区| 国产欧美一区二区精品性色| 久久无码高潮喷水| 四虎地址8848精品| 亚洲国产精品视频在线观看| 久久久久噜噜噜亚洲熟女综合| 亚洲欧美成人| 亚洲自拍高清视频网站| 深夜福利在线看| 国产亚洲综合在线| 50路60路老熟妇啪啪| 激情综合婷婷| 欧美疯狂xxxx大交乱88av| 欧美在线观看不卡| 国产一区二区三区在线观看免费| 含羞草久久爱69一区| 超碰在线cao| 亚洲另类xxxx| 亚洲永久精品一区| 国产精品一二三在| 日韩视频在线视频| 日韩深夜影院| 国产精品一久久香蕉国产线看观看| 9i精品一二三区| 制服丝袜一区二区三区| 欧美成人aaaaⅴ片在线看| 蜜臀a∨国产成人精品| 国产精品区一区二区三含羞草| 91精品国产黑色瑜伽裤| 亚洲欧洲第一视频| 一区二区精品视频在线观看| 91在线精品秘密一区二区| 一区二区三区|亚洲午夜| 一个人www视频在线免费观看| 亚洲欧美日韩国产精品| 91亚洲精品国偷拍自产在线观看| 一区二区在线免费观看| 爱爱爱爱免费视频| 韩日精品视频| 成人免费看黄网站| 二区在线视频| 色综合天天视频在线观看| 国产一区二区三区四区在线| 亚洲影院一区| 亚洲欧美电影在线观看| 一区二区三区视频播放| 国产99久久精品一区二区| av在线官网| 亚洲美女视频网站| 精品人妻伦一区二区三区久久| 好吊成人免视频| 老司机成人免费视频| 久久综合九色综合97_久久久| 成年女人18级毛片毛片免费| 国产伦精品一区二区三区视频 | 成人直播在线观看| 国产精品三级网站| 九色porny视频在线观看| 日韩在线视频中文字幕| 亚洲人午夜射精精品日韩| 制服视频三区第一页精品| 日本韩国欧美中文字幕| 一区二区三区中文免费| 纪美影视在线观看电视版使用方法| 国产suv一区二区三区88区| 四虎4hu永久免费入口| 伊人久久大香伊蕉在人线观看热v| 97色在线观看免费视频| 在线免费观看污| 色噜噜狠狠狠综合曰曰曰88av| 亚洲av无码乱码国产精品| 亚洲一区二区三区四区在线免费观看 | 波多野结衣 作品| 欧美午夜在线播放| 国产精品精品久久久久久| 国产无遮挡裸体视频在线观看| 久久在线精品视频| 亚洲国产综合网| 欧美电影一区二区| 中文字幕视频免费观看| 色屁屁一区二区| 午夜时刻免费入口| 91亚洲精品久久久蜜桃网站 | 高清精品视频| 亚洲在线一区二区| 一区二区三区| 国产欧美最新羞羞视频在线观看| 自拍视频在线网| 亚洲欧美在线磁力| 欧美挠脚心网站| 欧美日韩精品系列| 亚洲 国产 日韩 欧美| 色综合久久久久综合体桃花网| 久草视频精品在线| 亚洲高清不卡在线观看| 90岁老太婆乱淫| 91香蕉视频污| 97人妻天天摸天天爽天天| 成人激情午夜影院| 一道本视频在线观看| 视频一区国产视频| 麻豆一区二区三区视频| 日韩av一区二区三区四区| 日本一道在线观看| 欧美激情aⅴ一区二区三区| 欧美一二三不卡| 在线欧美一区| 中文精品一区二区三区| 欧美a一欧美| 久久99欧美| 麻豆精品久久| 成人在线观看91| 78精品国产综合久久香蕉| 国产精品高潮在线| 欧洲亚洲精品| 3d动漫精品啪啪一区二区三区免费| 精品伊人久久| 精品久久久久久一区二区里番| 三级小说欧洲区亚洲区| 欧美日韩国产不卡在线看| 日韩精品免费一区二区在线观看| 国产精品一 二 三| 五月天亚洲色图| 日韩一区二区电影在线观看| 久久99精品久久久久久欧洲站| 国产精品一区二区三区在线播放 | 欧美男生操女生| 亚洲大尺度网站| 亚洲免费中文字幕| 日本中文字幕在线看| 日韩禁在线播放| 亚洲av无码乱码在线观看性色| 精品免费日韩av| 邻居大乳一区二区三区| 日韩在线中文字幕| 激情图片在线观看高清国产| 日韩网站在线观看| 性欧美video高清bbw| 色哟哟入口国产精品| 自由的xxxx在线视频| 992tv成人免费视频| 欧美v亚洲v| 久久成年人视频| 亚洲私拍视频| 亚洲va久久久噜噜噜久久天堂| 欧美日日夜夜| 香蕉视频在线网址| 91九色精品| 在线观看国产一区| 99综合视频| 91热视频在线观看| 久久美女高清视频| 久草视频在线免费看| 一区二区三区日韩精品视频| av图片在线观看| 欧美午夜片欧美片在线观看| 国产又大又长又粗| 国产婷婷成人久久av免费高清| а√中文在线8| 国产精品电影一区| 美女视频免费精品| 日本一道在线观看| 久久精品国产一区二区三区免费看 | 成人国产精品免费观看动漫 | 中文字幕一区二区三区欧美日韩| 亚洲激情图片| 香蕉久久久久久久av网站| 国产精品中文久久久久久| 国产在线精品一区二区夜色 | 亚洲免费在线视频一区 二区| 国产视频1区2区| 亚洲精品99久久久久| 羞羞视频在线观看免费| 国产精品综合网站| 国产免费久久| 欧美日韩国产精品激情在线播放| 国产成人免费网站| 麻豆天美蜜桃91| 欧美精品视频www在线观看| 国产69精品久久app免费版| 欧美专区第一页| 国产一区二区主播在线| 久久精品国产美女| 一本色道久久精品| 性色av蜜臀av浪潮av老女人| 亚洲黄色免费网站| 国产情侣自拍小视频| 久久精品国产亚洲精品| 色帝国亚洲欧美在线| 成人一区二区电影| 99久久www免费| 中文字幕亚洲欧洲| 亚洲欧洲韩国日本视频| 一本色道久久综合熟妇| 一本一本久久a久久精品牛牛影视| 成人影院网站| 91久久在线视频| 国产精品久久久久久久久久10秀| 欧美第一页浮力影院| 国产精品久久三| 香蕉视频一区二区| 亚洲高清免费观看高清完整版| 久久久123| 国语精品中文字幕| 免费一区视频| 日韩福利在线视频| 欧美日韩在线综合| 好吊视频一二三区| 97精品免费视频| 亚洲涩涩av| 欧美三级理论片| 亚洲天天做日日做天天谢日日欢| 亚洲免费激情视频| 91精品在线免费| 日本在线观看大片免费视频| 国产乱码精品一区二区三区不卡| 亚洲第一网站| 精品欧美一区二区久久久| 欧美性猛交xxxx乱大交| 久久精彩视频| 亚洲精品欧洲| 欧美 亚洲 视频| 粉嫩av一区二区三区粉嫩| 亚洲国产成人精品激情在线| 亚洲精品永久免费| 四虎国产精品成人免费影视| 色哟哟免费网站| 91亚洲精品久久久蜜桃| 亚洲一区二区色| 久久久久久国产精品久久| 亚洲警察之高压线| 九九热精品在线播放| 亚洲午夜在线电影| 久久天堂电影| 51午夜精品| 欧美资源在线| 极品久久久久久| 日韩经典一区二区三区| 91麻豆精品一二三区在线| 久久精品视频16| 粉嫩蜜臀av国产精品网站| 九九热在线视频播放| 日韩性生活视频| 日韩超碰人人爽人人做人人添| 欧美日韩一区二区三区69堂| 亚洲成人av资源| 蜜桃视频网站在线| 欧美极品一区二区| 国产99精品国产| 在线免费观看一区二区| 午夜精品免费视频| 国产精品7m凸凹视频分类|