Mapreduce的經(jīng)典排序(快排 & 歸并)

1,快速排序

基本思想:選擇一個(gè)基準(zhǔn)元素,通常選擇第一個(gè)元素或者最后一個(gè)元素,通過一趟掃描喂急,將待排序列分成兩部分,一部分比基準(zhǔn)元素小,一部分大于等于基準(zhǔn)元素,此時(shí)基準(zhǔn)元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分念赶。


image.png
public class QuickSort {
    public static void main(String[] args) {
        int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1,8};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        //快速排序
        quick(a);
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }

    private static void quick(int[] a) {
        if(a.length>0){
            quickSort(a,0,a.length-1);
        }
    }

    private static void quickSort(int[] a, int low, int high) {
        if(low<high){ //如果不加這個(gè)判斷遞歸會(huì)無法退出導(dǎo)致堆棧溢出異常
            int middle = getMiddle(a,low,high);
            quickSort(a, 0, middle-1);
            quickSort(a, middle+1, high);
        }
    }

    private static int getMiddle(int[] a, int low, int high) {
        int temp = a[low];//基準(zhǔn)元素
        while(low<high){
            //找到比基準(zhǔn)元素小的元素位置
            while(low<high && a[high]>=temp){
                high--;
            }
            a[low] = a[high]; 
            while(low<high && a[low]<=temp){
                low++;
            }
            a[high] = a[low];
        }
        a[low] = temp;
        return low;
    }
}

2伴箩,歸并排序

基本思想:對(duì)于給定的一組集合启涯,利用遞歸與分治技術(shù)將數(shù)據(jù)序列劃分成為越來越小的子集合困肩,再對(duì)子集合排序整陌,最后再用遞歸方法將排好序的子集合合并成為越來越大的有序序列拗窃。
經(jīng)過第一輪比較后得到最小的記錄瞎领,然后將該記錄的位置與第一個(gè)記錄的位置交換;接著對(duì)不包括第一個(gè)記錄以外的其他記錄進(jìn)行第二次比較随夸,得到最小記錄并與第二個(gè)位置記錄交換九默;重復(fù)該過程,知道進(jìn)行比較的記錄只剩下一個(gè)為止宾毒。


20160427172905073.png
public class MergeSort {

    public static void main(String[] args) {
        int[] data = {50,10,90,30,70,40,80,60,20};
        print(data,true);
        mergeSort(data, 0, data.length -1 );
        print(data,false);
    }

    private static void mergeSort(int[] data, int left, int right) {
        if (left < right) {
            int middle = (left + right) / 2;
            mergeSort(data, left, middle);
            mergeSort(data, middle + 1, right);
            merge(data, left, middle, right);
        }

    }

    private static void merge(int[] data, int left, int middle, int right) {
        int[] tmpArray = new int[data.length];
        int mid = middle + 1;
        int third = left;
        int tmp = left;

        while(left <= middle && mid <= right) {

            if(data[left] <= data[mid]) {
                tmpArray[third++] = data[left++];
            }else {
                tmpArray[third++] = data[mid++];
            }
        }

        // 剩余部分依次放入臨時(shí)數(shù)組(實(shí)際上兩個(gè)while只會(huì)執(zhí)行其中一個(gè))
        while (mid <= right) {
            tmpArray[third++] = data[mid++];
        }
        while (left <= middle) {
            tmpArray[third++] = data[left++];
        }

        // 將臨時(shí)數(shù)組中的內(nèi)容拷貝回原數(shù)組中
        // (原left-right范圍的內(nèi)容被復(fù)制回原數(shù)組)
        while (tmp <= right) {
            data[tmp] = tmpArray[tmp++];
        }

    }

    private static void print(int[] data, boolean before) {
        if(before) {
            System.out.println("排序之前:");
        }else {
            System.out.println("排序之后:");
        }
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + ", ");
        }
        System.out.println();
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驼修,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诈铛,更是在濱河造成了極大的恐慌乙各,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幢竹,死亡現(xiàn)場(chǎng)離奇詭異耳峦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)妨退,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門妇萄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咬荷,你說我怎么就攤上這事∏嵫冢” “怎么了幸乒?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)唇牧。 經(jīng)常有香客問我罕扎,道長(zhǎng),這世上最難降的妖魔是什么丐重? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任腔召,我火速辦了婚禮,結(jié)果婚禮上扮惦,老公的妹妹穿的比我還像新娘臀蛛。我一直安慰自己,他們只是感情好崖蜜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布浊仆。 她就那樣靜靜地躺著,像睡著了一般豫领。 火紅的嫁衣襯著肌膚如雪抡柿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天等恐,我揣著相機(jī)與錄音洲劣,去河邊找鬼备蚓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛囱稽,可吹牛的內(nèi)容都是我干的星著。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粗悯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虚循!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起样傍,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤横缔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后衫哥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茎刚,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年撤逢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膛锭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚊荣,死狀恐怖初狰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情互例,我是刑警寧澤奢入,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站媳叨,受9級(jí)特大地震影響腥光,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糊秆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一武福、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痘番,春花似錦捉片、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兵拢,卻和暖如春翻斟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背说铃。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工访惜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘹履,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓债热,卻偏偏與公主長(zhǎng)得像砾嫉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窒篱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,253評(píng)論 0 2
  • 概述排序有內(nèi)部排序和外部排序焕刮,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大墙杯,一次不能容納全部的...
    Luc_閱讀 2,270評(píng)論 0 35
  • 概述 排序有內(nèi)部排序和外部排序配并,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大高镐,一次不能容納全部...
    蟻前閱讀 5,183評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序溉旋,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大嫉髓,一次不能容納全部...
    每天刷兩次牙閱讀 3,730評(píng)論 0 15
  • 天起了涼風(fēng)观腊,立冬了~ 耶和華在園中行走~ 他在問你~寶貝~你在哪里? 你躲在財(cái)富算行、美貌梧油、才華、勢(shì)力里纱意? 還是在我主...
    潔珮閱讀 188評(píng)論 0 0