【发布时间】:2018-09-01 20:12:23
【问题描述】:
我需要编写一个函数,它接收两个已经按升序排序的数组(A[] 和 B[]),它的函数分配一个数组 C[],恰好是 A 和 B 的大小之和,并交错C[] 中 A[] 和 B[] 的元素,所以数组 C[] 是按升序排列的。尽可能高效地编写函数。不是用 Bubble 方法也不是 Insertion 加入数组和对数组 C[] 排序。
示例: A[] = { 1, 3, 6, 7} 和 B[] = {2, 4, 5},新向量为 C[] = { 1, 2, 3, 4, 5, 6, 7}
我的代码没有停止运行,我做错了什么?
def union(v1, v2):
c = [0, 0, 0, 0, 0, 0, 0, 0]
auxv1 = 0
auxv2 = 0
i = 0
j = 0
k = 0
while i < len(v1)-1:
auxv1 = v1[i]
while j < len(v2)-1:
auxv2 = v2[j]
while k < len(c):
if auxv1 < auxv2:
c[k] = auxv1
i += 1
k += 1
else:
c[k] = auxv2
j += 1
k += 1
if i == len(v1)-1 and j == len(v2)-1:
return c
【问题讨论】:
-
我们不能使用嵌套循环
-
while i < len(v1) - 1停止应该怎么办? -
在 Python 中你不能比
list(sorted(A + B))更快,因为 Python 的排序速度非常快 (en.wikipedia.org/wiki/Timsort)。您的代码存在许多问题,从前两个 while 循环开始,不会更改循环变量(i 和 j),因此将永远运行...... -
您希望我们调试您的代码,还是提供新的解决方案?
-
@bereal 你读过 timsort 链接吗?它可能会进行两次运行检查和一次合并,并且将是 O(n) - 它也将是 C 代码(并且是正确的;-)
标签: python arrays python-3.x