归并:将两个有序的数组归并成一个更大的有序数组。

 

归并算法:先(递归地)将它分为两半分别排序,然后将结果归并起来。

· 优点:保证将任意长度为N的数组排序所需时间和NlogN成正比;

· 缺点:所需的额外空间和N成正比。

 

 

2.2.1 原地归并的抽象方法

    public static void merge(Comparable[] a, int lo, int mid, int hi) {
        // 将a[lo..mid]和a[mid+1..hi]归并
        int i = lo, j = mid + 1;

        for (int k = lo; k <= hi; k++) {    // 将a[lo..hi]复制到aux[lo..hi]
            aux[k] = a[k];
        }

        for (int k = lo; k <= hi; k++) {
            if (i > mid)                                        a[k] = aux[j++];    // 左半边用尽
            else if (j > hi)                                a[k] = aux[i++];    // 右半边用尽
            else if (less(aux[j], aux[i]))    a[k] = aux[j++];    // 右 < 左
            else                                                        a[k] = aux[i++];    // 右 > 左
        }
    }
merge

相关文章:

  • 2021-11-08
  • 2022-12-23
  • 2022-02-14
  • 2021-12-25
  • 2021-12-03
  • 2021-07-20
  • 2021-03-30
  • 2021-11-12
猜你喜欢
  • 2022-12-23
  • 2021-05-11
  • 2021-11-28
  • 2022-01-22
  • 2021-06-27
  • 2021-12-31
  • 2021-12-25
相关资源
相似解决方案