zoukankan      html  css  js  c++  java
  • ※归并排序(merge sort)

    /**

    • 归并排序:通常以递归的方式来实现,它反复将所处理的数组分成两半,并分别对这两半进行排序, 最后再把经过排序的数组归并在一起。
      */
      归并排序的伪代码实现:
      将数组分为两半
      对左半部分排序
      对右半部分排序
      合并左右两部分

    合并算法的伪代码描述:
    i1 = 0; //左半部分的索引
    i2 = 0;//右半部分的索引
    for(数组中元素的个数){
    if(左半部分下标为i1的元素值<= 右半部分下标为i2的元素值){
    将左半部分的当前值保存到新数组
    i1++;
    }else{
    将右半部分的当前值保存到新数组
    i2++;
    }
    -----------------------------------------------------------------------------------------------------------
    //代码实现:
    public static void mergeSort(int[] num) {
    // 将数组分为两半
    int[] left = Arrays.copyOfRange(num, 0, num.length / 2);// 不包括终点元素
    int[] right = Arrays.copyOfRange(num, num.length / 2, num.length);
    if (left.length > 1) {
    mergeSort(left);
    mergeSort(right);
    merge(num, left, right);
    }
    }

    public static void merge(int[] result, int[] left, int[] right) {
    int i1 = 0; // index of left array
    int i2 = 0; // index of right array
    for (int i = 0; i < result.length; i++) {
    if (i2 >= right.length || (i1 < left.length && left[i1] <= right[i2])) {
    result[i] = left[i1]; // take from left
    i1++;
    } else {
    result[i] = right[i2]; // take from right
    i2++;
    }
    }
    }

    ////end

  • 相关阅读:
    BZOJ 1057 悬线法求最大01矩阵
    POJ 2248
    SPOJ
    51NOD
    2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest J. Judging the Trick
    POJ 1379 模拟退火
    POJ 2420 模拟退火
    Frontend 事后诸葛亮
    【Frontend】Alpha Review 展示博客
    ASE19 团队项目 alpha 阶段 Frontend 组 scrum5 记录
  • 原文地址:https://www.cnblogs.com/understander/p/6686360.html
Copyright © 2011-2022 走看看