歸并排序-Java實(shí)現(xiàn)

在極客時(shí)間學(xué)習(xí)時(shí),又遇到了歸并排序,這里給出Java的實(shí)現(xiàn),附有注解,以備后面學(xué)習(xí)查看

private int[] sortArray(int[] waitDealArray) {
    if(waitDealArray == null) {
        return new int[0];
    }
    if(waitDealArray.length == 1) {
        return waitDealArray;
    }
    int middleIdx = waitDealArray.length / 2;
    // 將數(shù)組從中間分成左右兩個(gè),分而治之
    int[] leftArray = Arrays.copyOfRange(waitDealArray, 0, middleIdx);
    int[] rightArray = Arrays.copyOfRange(waitDealArray, middleIdx, waitDealArray.length);
    // 遞歸調(diào)用處理子問(wèn)題
    leftArray = sortArray(leftArray);
    rightArray = sortArray(rightArray);
    // 合并子問(wèn)題處理的結(jié)果
    int[] mergedArray = mergeArray(leftArray, rightArray);
    return mergedArray;
}

private int[] mergeArray(int[] leftArray, int[] rightArray) {
    if(leftArray == null) {
        leftArray = new int[0];
    }
    if(rightArray == null) {
        rightArray = new int[0];
    }
    int[] mergedArray = new int[leftArray.length + rightArray.length];
    int mi = 0, li = 0, ri = 0;
    // 用來(lái)合并兩個(gè)有序數(shù)組內(nèi)的數(shù)字
    while(li < leftArray.length && ri < rightArray.length) {
        if(leftArray[li] <= rightArray[ri]) {
            mergedArray[mi] = leftArray[li];
            li++;
        } else {
            mergedArray[mi] = rightArray[ri];
            ri++;
        }
        mi++;
    }
    // 如果某個(gè)數(shù)組還有剩余數(shù)字,直接放入合并數(shù)組即可
    if(li < leftArray.length) {
        for(int i = li; i < leftArray.length; i++) {
            mergedArray[mi] = leftArray[li];
            mi++;
        }
    }
    if(ri < rightArray.length) {
        for(int i = ri; i < rightArray.length; i++) {
            mergedArray[mi] = rightArray[i];
            mi++;
        }
    }
    return mergedArray;
}

寫(xiě)一個(gè)測(cè)試用例測(cè)試下:

/**
 * 測(cè)試歸并排序操作
 */
@Test
public void testUnionSort() {
    int[] waitDealArray = {234, 12, 45, 2, 908, 111, 309, 103, 205, 9};
    int[] sortedArray = sortArray(waitDealArray);
    System.out.println(Arrays.toString(sortedArray));
}

打印結(jié)果:

[2, 9, 12, 45, 103, 111, 205, 234, 309, 908]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. 寫(xiě)在前面 要學(xué)習(xí)算法,“排序”是一個(gè)回避不了的重要話題,在分析完并查集算法和常用數(shù)據(jù)結(jié)構(gòu)之后,今天我們終于可...
    Leesper閱讀 2,637評(píng)論 0 40
  • 2018.03.20今日分享:今晚崇遠(yuǎn)做了語(yǔ)文、數(shù)學(xué)、英語(yǔ)、游泳訓(xùn)練、美術(shù)、學(xué)能訓(xùn)練等課程,我說(shuō)崇遠(yuǎn)一晚上做了這么...
    幸福樹(shù)328閱讀 201評(píng)論 0 0
  • 所有男人都敢作敢當(dāng) 所有女人都溫柔如霜 冰河里魚(yú)兒盡情游蕩 九天外鳥(niǎo)兒自由翱翔 酒館里永遠(yuǎn)熙熙攘攘 馬路邊青年放聲...
    小小仲馬閱讀 237評(píng)論 2 1
  • react簡(jiǎn)介 react是由Fecebook開(kāi)發(fā)的UI庫(kù),它的核心思想開(kāi)發(fā)reactJS的組件可以重復(fù)調(diào)用,易于...
    小_b6d4閱讀 532評(píng)論 0 0

友情鏈接更多精彩內(nèi)容