最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

圖解Java排序算法之快速排序的三數(shù)取中法

 更新時間:2021年11月04日 15:26:02   作者:dreamcatcher-cx  
這篇文章主要為大家詳細介紹了Java排序算法之快速排序的三數(shù)取中法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

基本步驟

三數(shù)取中

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

根據(jù)樞紐值進行分割

 

代碼實現(xiàn)

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("排序結(jié)果:" + 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;
    }
}

排序結(jié)果

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

總結(jié)

快速排序是一種交換類的排序,它同樣是分治法的經(jīng)典體現(xiàn)。在一趟排序中將待排序的序列分割成兩組,其中一部分記錄的關鍵字均小于另一部分。然后分別對這兩組繼續(xù)進行排序,以使整個序列有序。在分割的過程中,樞紐值的選擇至關重要,本文采取了三位取中法,可以很大程度上避免分組"一邊倒"的情況??焖倥判蚱骄鶗r間復雜度也為O(nlogn)級。

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • 簡單談談java中匿名內(nèi)部類構(gòu)造函數(shù)

    簡單談談java中匿名內(nèi)部類構(gòu)造函數(shù)

    這篇文章主要簡單給我們介紹了java中匿名內(nèi)部類構(gòu)造函數(shù),并附上了簡單的示例,有需要的小伙伴可以參考下。
    2015-11-11
  • SpringBoot使用Maven打包異常-引入外部jar的問題及解決方案

    SpringBoot使用Maven打包異常-引入外部jar的問題及解決方案

    這篇文章主要介紹了SpringBoot使用Maven打包異常-引入外部jar,需要的朋友可以參考下
    2020-06-06
  • SpringBoot +Vue開發(fā)考試系統(tǒng)的教程

    SpringBoot +Vue開發(fā)考試系統(tǒng)的教程

    這篇文章主要介紹了SpringBoot +Vue開發(fā)考試系統(tǒng),支持多種題型:選擇題、多選題、判斷題、填空題、綜合題以及數(shù)學公式。支持在線考試,教師在線批改試卷。本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2020-05-05
  • 使用React和springboot做前后端分離項目的步驟方式

    使用React和springboot做前后端分離項目的步驟方式

    這篇文章主要介紹了使用React和springboot做前后端分離項目的步驟方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Kotlin中常見的List使用示例教程

    Kotlin中常見的List使用示例教程

    filter 就像其本意一樣,可以通過 filter 對 Kotlin list 進行過濾,本文重點給大家介紹Kotlin中常見的List使用,感興趣的朋友一起看看吧
    2023-11-11
  • Spring?Boot?集成接口管理工具?Knife4j

    Spring?Boot?集成接口管理工具?Knife4j

    這篇文章主要介紹了Spring?Boot?集成接口管理工具?Knife4j,首先通過創(chuàng)建一個?Spring?Boot?項目展開主題,需要的小伙伴可以參考一下
    2022-05-05
  • Java排序算法之選擇排序

    Java排序算法之選擇排序

    這篇文章主要介紹了Java排序算法之選擇排序,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java Map集合詳解與演示

    Java Map集合詳解與演示

    Map用于保存具有映射關系的數(shù)據(jù),Map集合里保存著兩組值,一組用于保存Map的ley,另一組保存著Map的value,可以理解為Map中的元素是兩個對象,一個對象作為鍵,一個對象作為值。鍵不可以重復,但是值可以重復
    2021-11-11
  • idea一鍵部署SpringBoot項目jar包到服務器的實現(xiàn)

    idea一鍵部署SpringBoot項目jar包到服務器的實現(xiàn)

    我們在開發(fā)環(huán)境部署項目一般通過idea將項目打包成jar包,然后連接linux服務器,將jar手動上傳到服務中,本文就來詳細的介紹一下步驟,感興趣的可以了解一下
    2023-12-12
  • Nacos進程自動消失的原因分析

    Nacos進程自動消失的原因分析

    當使用低版本Nacos時,啟動后關閉窗口或執(zhí)行control+c會導致Nacos服務自動退出,原因是Nacos并未作為后臺進程運行,解決方法是在啟動Nacos時,采用后臺進程方式啟動,這樣即使關閉窗口,Nacos服務也不會退出,從而保證服務的持續(xù)運行
    2023-02-02

最新評論

永兴县| 夹江县| 荔浦县| 乌拉特前旗| 镇赉县| 蒙山县| 澄迈县| 铜鼓县| 旺苍县| 汉川市| 商水县| 周口市| 磐石市| 甘德县| 吉首市| 晋中市| 聂拉木县| 安陆市| 临海市| 静乐县| 乃东县| 莱芜市| 巴林右旗| 彝良县| 喀喇沁旗| 东兴市| 静乐县| 确山县| 印江| 五莲县| 囊谦县| 宝清县| 英德市| 沙河市| 滁州市| 赫章县| 鲜城| 营口市| 蓝田县| 新和县| 宝坻区|