【问题标题】:Merging sorted arrays without using a sort function in Java在Java中不使用排序函数合并排序数组
【发布时间】:2011-07-23 03:11:15
【问题描述】:

我有一个作业问题需要在不使用“排序”命令的情况下解决。我会很感激任何建议。

问题:假设您有两个整数数组,arr1 和 arr2,每个数组都包含按升序排序的整数。

编写一个名为 merge 的静态方法,它接收这两个数组的参数并返回对新的、排序的整数数组的引用,该数组是合并 arr 和 arr2 的整数的结果。

【问题讨论】:

    标签: java arrays sorting


    【解决方案1】:

    【讨论】:

    • 如果数组已经排序,则只需要最后一部分(合并部分)。
    • 这对于一个简单的任务来说太复杂了。
    • 归并排序现在看起来并不简单,因为它刚刚被学习,实际上它很快就会看起来很容易。与对程序员的要求和将提供什么样的输入相比,拥有“已经排序”的输入并且只需要合并它们是一个梦想之地。
    【解决方案2】:

    伪代码:

    1: Set two pointers to beginning of the two arrays.
    2: Compare the values from the two arrays at the pointers.
    3: Add the smaller value to a new array and move its pointer to the next value in the array.
    4: Repeat till both pointers cross the ends of the two arrays.
    

    【讨论】:

      【解决方案3】:

      简单,这是归并排序算法的最后一步。制作 2 个整数变量来跟踪每个不同输入数组的索引。

      然后循环遍历输入数组的前 2 个元素中添加最小值(或最大值,具体取决于您的排序顺序)的元素。这样在每次迭代中,最小的可能值被添加到返回数组中。只需确保检查您的第一个输入数组索引是否仍小于第一个输入数组长度,如果不是,那么您知道要添加的其余元素在第二个输入数组中。增加您从中获取元素的数组的索引,然后增加整个值数组的索引。

      【讨论】:

        【解决方案4】:

        如果你需要加分或者你很无聊:相对较新的Timsort algorithm 使用了稍微改进的合并功能,用于数据聚集的情况(这比较常见)。这在http://svn.python.org/projects/python/trunk/Objects/listsort.txt 中有记录 - 搜索“疾驰模式”。在timsort的Java实现中也用到了驰骋模式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-09
          • 2021-03-04
          • 2017-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多