美文网首页
二路归并

二路归并

作者: 爱读书的夏夏 | 来源:发表于2020-02-16 22:18 被阅读0次

参考文章:
https://blog.csdn.net/weixin_39651041/article/details/80010906

基本思想:将原始无序序列划分为子序列,先使每个子序列有序,然后将有序的子序列合并,得到完全有序的序列。

代码实现:

    public static void mergeSort(int[] nums,int low, int high){
        //对nums的判空在排序外层处理。否则每次递归都需要做重复无效的判断。
        if (low >= high){
            return;
        }
        int mid = (low + high)/2;
        mergeSort(nums,low,mid);
        mergeSort(nums,mid+1,high);
        merge(nums,low,mid,high);

    }

    public static void merge(int[] nums, int low,  int mid , int high){
        int[] temp = new int[nums.length];
        int lowStart = low;
        int highStart = mid + 1;
        int start = low; //注意此处的下标应该为入参中的low。而不是0.因为这里可能只对数组的部分范围内的数据做排序。
        while (lowStart <= mid && highStart <= high){//合并两个有序数组
            if (nums[lowStart] <= nums[highStart]){
                temp[start++] = nums[lowStart++];
            } else {
                temp[start++] = nums[highStart++];
            }
        }
        while (lowStart <= mid){
            temp[start++] = nums[lowStart++];
        }
        while (highStart <= high){
            temp[start++] = nums[highStart++];
        }
        while (low <= high){ //对该范围内的数据进行复制,注意需要包括等于。仅对该范围内的,其他范围内数据,temp中没有值!!!
            nums[low] = temp[low++];
        }
    }

相关文章

  • 排序算法之归并排序

    1、归并排序的基本思想 归并排序主要是二路归并排序。二路归并排序的基本思想,设数组a中存放了n个数据元素,初始时把...

  • 归并排序+基数排序

    归并排序 二路归并排序归并过程 O(n)整个归并排序需要⌈log2n⌉趟(k路归并需要⌈logkn⌉) 空间效率O...

  • 二路归并

    迭代写法,不难记,如果用sort的话,但是用merge就很难记忆了记忆:两层循环,加最里面merge或者sort函数

  • 二路归并

    参考文章:https://blog.csdn.net/weixin_39651041/article/detail...

  • 常见算法前端JS实现 — 排序

    1.排序算法 1.1 冒泡排序 1.2 快速排序 1.3 二路归并

  • 前端常见算法

    冒泡排序 快速排序 二路归并将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序 判断回文字符串 翻转字...

  • 【数据结构】【C#】021-归并类排序: ✌二路归并(稳定)

    归并排序:二路归并(稳定) 基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即...

  • 算法复习-归并类排序(1)-二路归并排序

    二路归并排序 归并排序可以看作一个分而治之的过程:先将整个序列分成两半,对每一半分别进行归并排序,将得到两个有序序...

  • 软件设计师备考知识04

    1 排序 1 归并排序: 例:二路归并 将两个有序序列合并成一个有序序列。 过程: 2 关系 1 泛化、概化: 把...

  • 软件设计师备考知识04

    1 排序 1 归并排序: 例:二路归并 将两个有序序列合并成一个有序序列。 过程: 2 关系 1 泛化、概化: 把...

网友评论

      本文标题:二路归并

      本文链接:https://www.haomeiwen.com/subject/wifvfhtx.html