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

Java 快速排序(QuickSort)原理及實(shí)現(xiàn)代碼

 更新時(shí)間:2014年01月16日 15:36:02   投稿:shangke  
這篇文章主要介紹了Java 快速排序(QuickSort)原理及實(shí)現(xiàn)代碼,有需要的朋友可以參考一下

快速排序(QuickSort )是常用到的效率比較高的一種排序算法,在面試過程中也經(jīng)常提及。下面就詳細(xì)講解一下他的原理、給出一個(gè)Java版本的實(shí)現(xiàn)。

快速排序思想:

快速排序的過程——挖坑填數(shù)法(這是一個(gè)很形象的名稱),對一個(gè)元素集合R[ low ... high ] ,首先取一個(gè)數(shù)(一般是R[low] )做參照 , 以R[low]為基準(zhǔn)重新排列所有的元素。

所有比R[low]小的放前面,所有比R[low] 大的放后面,然后以R[low]為分界,對R[low ... high] 劃分為兩個(gè)子集和,再做劃分。直到low >=  high 。

比如:對R={37, 40, 38, 42, 461, 5, 7, 9, 12}進(jìn)行一趟快速排序的過程如下(注:下面描述的內(nèi)容中元素下表從 0 開始):

原始序列3740384246157912
一:high-->low1240384246157912
一:low --> high1240384246157940
二:high-->low129384246157940
二:low --> high1293842461573840
三:high --> low129742461573840
三:low -->high1297424615423840
四:high --> low129754615423840
四:low --> high12975461461423840
一趟排序結(jié)果1297537461423840

開始選取基準(zhǔn) base = 37,初始位置下表 low = 0 , high = 8  , 從high=8,開始如果R[8] < base ,  將high位置中的內(nèi)容寫入到R[low]中, 將high位置空出來, low = low +1 ;

從low開始探測,由于low=1 , R[low] > base ,所以將R[low]寫入到R[high] , high = high -1 ;

檢測到low < high ,所以第一趟快速排序仍需繼續(xù):

此時(shí)low=1,high=7,因?yàn)?R[high] < base ,所以將 R[high] 寫入到到R[low]中,low = low + 1;

從low開始探測,low = 2 , R[low] >base ,所以講R[low]寫入到R[high],high=high-1;

繼續(xù)檢測到 low 小于high


此時(shí)low=2,high=6,同理R[high] < base ,將R[high] 寫入到R[low]中,low=low+1;

從low繼續(xù)探測,low = 3 , high=6 , R[low] > base , 將R[low]寫入到R[high]中,high = high-1;

繼續(xù)探測到low小于high

此時(shí)low=3,high=5,同理R[high] < base,將R[high]寫入到R[low]中,low = low +1;

從low繼續(xù)探測,low = 4,high=5,由于R[low] > base , 將R[low]寫入到R[high]中,high = high -1 ;

此時(shí)探測到low == high == 4 ;該位置即是base所在的位置,將base寫入到該位置中.

然后再對子序列Rs1 = {12,9,7,5} 和 Rs2={461,42,38,40}做一趟快速排序,直到Rsi中只有一個(gè)元素,或沒有元素。

(注: 在以上表單中可以看到一趟排序中有一些重復(fù)的數(shù)據(jù)(原始數(shù)據(jù)中沒有重復(fù)的數(shù)據(jù)),這是因?yàn)闆]有清除該位置的數(shù)據(jù),我們在特定的時(shí)間看該內(nèi)存塊的數(shù)據(jù)依然是它,直到下一次將數(shù)據(jù)寫入該位置位置 —— 在此該位置的數(shù)據(jù)是一個(gè)沒有意義臟數(shù)據(jù),稱之為 “坑”)

快速排序的Java實(shí)現(xiàn):

復(fù)制代碼 代碼如下:

private static boolean isEmpty(int[] n) {
        return n == null || n.length == 0;
    }

    // ///////////////////////////////////////////////////
    /**
     * 快速排序算法思想——挖坑填數(shù)方法:
     *
     * @param n 待排序的數(shù)組
     */
    public static void quickSort(int[] n) {
        if (isEmpty(n))
            return;
        quickSort(n, 0, n.length - 1);
    }

    public static void quickSort(int[] n, int l, int h) {
        if (isEmpty(n))
            return;
        if (l < h) {
            int pivot = partion(n, l, h);
            quickSort(n, l, pivot - 1);
            quickSort(n, pivot + 1, h);
        }
    }

    private static int partion(int[] n, int start, int end) {
        int tmp = n[start];
        while (start < end) {
            while (n[end] >= tmp && start < end)
                end--;
            if (start < end) {
                n[start++] = n[end];
            }
            while (n[start] < tmp && start < end)
                start++;
            if (start < end) {
                n[end--] = n[start];
            }
        }
        n[start] = tmp;
        return start;
    }

在代碼中有這樣一個(gè)函數(shù):

復(fù)制代碼 代碼如下:

 public static void quickSortSwap(int[] n, int l, int h)

關(guān)于快速排序就寫到這里了。

相關(guān)文章

  • Java實(shí)現(xiàn)最小高度樹

    Java實(shí)現(xiàn)最小高度樹

    本文主要介紹了Java實(shí)現(xiàn)最小高度樹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot框架整合Mybatis簡單攻略

    SpringBoot框架整合Mybatis簡單攻略

    這篇文章主要介紹了SpringBoot框架整合Mybatis的簡單攻略,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-10-10
  • Spring中的EurekaServer啟動(dòng)詳解

    Spring中的EurekaServer啟動(dòng)詳解

    這篇文章主要介紹了Spring中的EurekaServer啟動(dòng)詳解,初始化eureka,包含eureka集群的同步和發(fā)布注冊,這個(gè)方法時(shí)重寫ServletContextListener#contextInitialized,是eureka啟動(dòng)的入口了,需要的朋友可以參考下
    2023-11-11
  • 老生常談Java動(dòng)態(tài)編譯(必看篇)

    老生常談Java動(dòng)態(tài)編譯(必看篇)

    下面小編就為大家?guī)硪黄仙U凧ava動(dòng)態(tài)編譯(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot集成E-mail發(fā)送各種類型郵件

    SpringBoot集成E-mail發(fā)送各種類型郵件

    這篇文章主要為大家詳細(xì)介紹了SpringBoot集成E-mail發(fā)送各種類型郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • java實(shí)現(xiàn)同步回調(diào)的示例代碼

    java實(shí)現(xiàn)同步回調(diào)的示例代碼

    同步回調(diào)是一種在調(diào)用代碼中同步執(zhí)行回調(diào)函數(shù)的編程模式,在Java中,通過定義和實(shí)現(xiàn)接口來構(gòu)建同步回調(diào),本文就來介紹一下如何實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn)

    fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java單例模式學(xué)習(xí)示例

    java單例模式學(xué)習(xí)示例

    java中單例模式是一種常見的設(shè)計(jì)模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種,下面提供了單例模式的示例
    2014-01-01
  • Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法

    Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法

    在Java中生成隨機(jī)數(shù)的場景有很多,下面這篇文章主要給大家介紹了關(guān)于Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 解決Java?結(jié)構(gòu)化數(shù)據(jù)處理開源庫?SPL的問題

    解決Java?結(jié)構(gòu)化數(shù)據(jù)處理開源庫?SPL的問題

    這篇文章主要介紹了Java?結(jié)構(gòu)化數(shù)據(jù)處理開源庫?SPL的問題,Scala提供了較豐富的結(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù),但編譯型語言的特點(diǎn),也使它不能成為理想的結(jié)構(gòu)化數(shù)據(jù)計(jì)算類庫,對此內(nèi)容感興趣的朋友一起看看吧
    2022-03-03

最新評論

二连浩特市| 靖安县| 勐海县| 天柱县| 宁波市| 娄底市| 永寿县| 称多县| 类乌齐县| 大名县| 讷河市| 定州市| 太仆寺旗| 无为县| 武强县| 麦盖提县| 达尔| 罗江县| 舒城县| 巴中市| 德化县| 阿克苏市| 舞钢市| 西藏| 洛宁县| 绥江县| 额尔古纳市| 海原县| 调兵山市| 三亚市| 大庆市| 临沂市| 巴塘县| 普格县| 舞钢市| 长岛县| 乐东| 大宁县| 溧水县| 凤城市| 鞍山市|