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

java實現(xiàn)歸并排序算法

 更新時間:2015年04月09日 11:21:02   投稿:hebedich  
歸并排序:是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用。 本文我們就來詳細的探討下。

歸并排序算法思想:
分而治之(divide - conquer);每個遞歸過程涉及三個步驟
第一, 分解: 把待排序的 n 個元素的序列分解成兩個子序列, 每個子序列包括 n/2 個元素.
第二, 治理: 對每個子序列分別調(diào)用歸并排序MergeSort, 進行遞歸操作
第三, 合并: 合并兩個排好序的子序列,生成排序結(jié)果.

public static void mergeSort(int[] a, int[] tmp, int left, int right) {
    if (left < right) {
      int mid = left + (right - left) / 2;
      mergeSort(a, tmp, left, mid);// 左排序
      mergeSort(a, tmp, mid + 1, right);// 右排序
      merge(a, tmp, left, mid + 1, right);// 左右合并
    }
  }
public static void merge(int[] a, int[] tmp, int left, int rightPos,
      int right) {
    int leftEnd = rightPos - 1;
    int tmpPos = left;
    int num = right - left + 1;
    while (left <= leftEnd && rightPos <= right) {
      if (a[left] < a[rightPos]) {
        tmp[tmpPos++] = a[left++];
      } else {
        tmp[tmpPos++] = a[rightPos++];
      }
    }
    while (left <= leftEnd) {
      tmp[tmpPos++] = a[left++];
    }
    while (rightPos <= right) {
      tmp[tmpPos++] = a[rightPos++];
    }
    for (int i = 0; i < num; i++, right--) {
      a[right] = tmp[right];
    }
  }

歸并算法示意圖:

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

最新評論

论坛| 岳阳县| 咸宁市| 马鞍山市| 曲周县| 全南县| 开封县| 缙云县| 梧州市| 柳州市| 忻城县| 仪陇县| 武胜县| 蓬溪县| 固始县| 赤壁市| 内乡县| 灵山县| 夏邑县| 乌拉特中旗| 独山县| 龙州县| 虹口区| 城步| 綦江县| 博兴县| 株洲市| 呼玛县| 昌吉市| 栖霞市| 依安县| 蒲江县| 大洼县| 西安市| 永泰县| 凤翔县| 土默特右旗| 神池县| 柳州市| 兰州市| 莲花县|