我正在尝试合并两个已排序的数组,而不使用任何内置排序方法。这就是我到目前为止所拥有的。
def merge(array_1, array_2)
i = 0
k = 0
merged_array = []
while i < array_1.count && k < array_2.count
while k < array_2.count && array_1[i] > array_2[k]
merged_array << array_2[k]
k += 1
end
merged_array << array_1[i]
i += 1
end
merged_array
end
array_1 = [5,8,9,11]
array_2 = [4,6,7,12,13]
p merge(array_1, array_2)
输入为array_1 = [5,8,9,11]
和array_2 = [4,6,7,12,13]
,输出为[4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
。有没有人能解释一下为什么它不起作用。谢谢!
3条答案
按热度按时间e5nszbig1#
尝尝这个
不需要跟踪指数。合并排序可以追溯到大型机和磁带的时代,因此只能使用枚举器来实现。
这是怎么回事?
each
创建枚举器peek
返回下一个元素,而不推进枚举数next
返回包含枚举数的下一个元素StopIteration
loop
重复代码块,直到引发StopIteration
hc2pp10m2#
可以将一个数组的元素插入到另一个数组的副本中,使用数组#bsearch_index来确定第一个数组的每个元素应该放在哪里。
这是O(n1*log(N2)),n1和n2是两个数组的大小,因此循环在两个数组中较小的一个上会更有效率。
o2gm4chl3#
比较方法使用内核#循环
MERGE_ARRAY_LOOP 0.349738 0.002263 0.352001(0.352043)
MERGE_ARRAY_NEW 0.075791 0.002874 0.078665(0.078680)