【发布时间】:2011-07-23 03:11:15
【问题描述】:
我有一个作业问题需要在不使用“排序”命令的情况下解决。我会很感激任何建议。
问题:假设您有两个整数数组,arr1 和 arr2,每个数组都包含按升序排序的整数。
编写一个名为 merge 的静态方法,它接收这两个数组的参数并返回对新的、排序的整数数组的引用,该数组是合并 arr 和 arr2 的整数的结果。
【问题讨论】:
我有一个作业问题需要在不使用“排序”命令的情况下解决。我会很感激任何建议。
问题:假设您有两个整数数组,arr1 和 arr2,每个数组都包含按升序排序的整数。
编写一个名为 merge 的静态方法,它接收这两个数组的参数并返回对新的、排序的整数数组的引用,该数组是合并 arr 和 arr2 的整数的结果。
【问题讨论】:
【讨论】:
伪代码:
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.
【讨论】:
简单,这是归并排序算法的最后一步。制作 2 个整数变量来跟踪每个不同输入数组的索引。
然后循环遍历输入数组的前 2 个元素中添加最小值(或最大值,具体取决于您的排序顺序)的元素。这样在每次迭代中,最小的可能值被添加到返回数组中。只需确保检查您的第一个输入数组索引是否仍小于第一个输入数组长度,如果不是,那么您知道要添加的其余元素在第二个输入数组中。增加您从中获取元素的数组的索引,然后增加整个值数组的索引。
【讨论】:
如果你需要加分或者你很无聊:相对较新的Timsort algorithm 使用了稍微改进的合并功能,用于数据聚集的情况(这比较常见)。这在http://svn.python.org/projects/python/trunk/Objects/listsort.txt 中有记录 - 搜索“疾驰模式”。在timsort的Java实现中也用到了驰骋模式。
【讨论】: