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

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

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

歸并排序算法思想:
分而治之(divide - conquer);每個(gè)遞歸過程涉及三個(gè)步驟
第一, 分解: 把待排序的 n 個(gè)元素的序列分解成兩個(gè)子序列, 每個(gè)子序列包括 n/2 個(gè)元素.
第二, 治理: 對(duì)每個(gè)子序列分別調(diào)用歸并排序MergeSort, 進(jìn)行遞歸操作
第三, 合并: 合并兩個(gè)排好序的子序列,生成排序結(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];
    }
  }

歸并算法示意圖:

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

相關(guān)文章

最新評(píng)論

苍南县| 镇坪县| 政和县| 昌平区| 二手房| 晋州市| 道真| 通海县| 武安市| 东丽区| 攀枝花市| 彰武县| 泗水县| 霍山县| 扎赉特旗| 安顺市| 九江县| 青神县| 安远县| 时尚| 枝江市| 奎屯市| 万全县| 富阳市| 承德市| 阿鲁科尔沁旗| 宁晋县| 卢氏县| 绥德县| 呈贡县| 宕昌县| 裕民县| 马龙县| 乐昌市| 井冈山市| 沙坪坝区| 靖宇县| 阿合奇县| 上栗县| 房产| 黑水县|