美文网首页
合并排序

合并排序

作者: freagle | 来源:发表于2018-12-23 22:39 被阅读0次

两个有序序列的合并

给出两个有序序列L1,L2,将它们合并为一个有序序列是很简单的,方法如下:

index 0 1 2 3 4
L1 3 4 5 8 9
L2 0 1 2 6 7

同时遍历两个序列,比较两个序列的值,将较小的序列值填入你的目标序列L3并将该序列下标右移,比如L1[0] > L2[0],就把L2[0] = 0填入L3[0],然后再比较L1[0],L2[1],以此类推。最终将得到合并序列L3

递归完成合并排序

长度为1的序列,可以认为是有序,那么就可以将一个无序序列分解到长度为1的序列进行合并,这个过程可以递归实现。递归的思路就是将无序序列一分为二,分别求解两个无序序列的排序结果,然后对两个序列进行合并,进而最终分解为两个长度为1的序列进行合并。

Code


public static void mergeSort(int[] a, int low, int high) {
        int length = high - low;
        if (length == 1) return;
        int mid = (low + high) >>> 1;
        mergeSort(a, low, mid);
        mergeSort(a, mid, high);

        int[] mergeTo = new int[length];

        for (int i = low, j = mid, k = 0; i < mid || j < high;) {
            if (i < mid && (j == high || a[i] < a[j])) {
                mergeTo[k++] = a[i++];
            } else {
                mergeTo[k++] = a[j++];
            }
        }

        for (int i = 0; i < mergeTo.length; i++) {
            a[low + i] = mergeTo[i];
        }
    }

相关文章

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • Python 排序算法汇总

    快速排序 合并排序

  • ARTS第五周2020620

    Algorithm 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • 合并K个排序链表【LeetCode:23】

    题目: 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: ...

  • Swift - LeetCode - 合并K个排序链表

    题目 合并K个排序链表 问题: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 解题思路:...

  • LeetCode:合并K个排序链表

    合并K个排序链表(困难) 题目叙述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • Timsort详解

    原理介绍 TimSort是结合了合并排序(合并排序)和插入排序(插入排序)而得出的排序算法,它在现实中有很好的效率...

  • 归并排序

    归并排序:递归加合并的排序

  • 合并排序

    合并排序

  • 在excel中排序的几个方法

    一、横向排序 按第4行进行排序 排序方法演示: 二、合并单元格排序 如果表格中有合并单元格,排序将变得非常困难。 ...

网友评论

      本文标题:合并排序

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