【发布时间】:2021-02-12 22:56:49
【问题描述】:
下面还有一些代码正在执行合并排序。 它是使用 python 整数数组(整数列表)作为我的初始测试用例来实现的。这进展顺利。 但是,一旦这工作正常,我生成了一组随机数字以进一步测试。这个列表是一个 numpy 数组。 归并排序不适用于 numpy 数组,结果看起来像重复的数字,并且重建没有按预期工作。
我的假设是细分数组传递给合并排序然后在内存中重新组合的方式在两者之间是不同的,这就是导致问题的原因。不过,我不确定。
有什么想法吗?
示例数组: 合作:
Array = [48,44,19,59,72,80,42,65,82,8,95,68]
不合作
unsorted = np.random.randint(1, 1000, 150)
归并排序代码:
#function for merging two sub-arrays
def merge(left, right, Array):
i = 0
j = 0
k = 0
while (i < len(left) and j < len(right)):
if (left[i] < right[j]):
Array[k] = left[i]
i = i+1
else:
Array[k] = right[j]
j = j+1
k = k+1
while (i < len(left)):
Array[k] = left[i]
i = i+1
k = k+1
while (j < len(right)):
Array[k] = right[j]
j = j+1
k = k+1
#function for dividing and calling merge function
def mergesort(Array):
n = len(Array)
if (n < 2):
return
mid = n / 2
left = Array[0 : int(np.round(mid))]
right = Array[int(np.round(mid)) : n]
print("array size = {}, leftsize= {}, rightsize= {}".format(n, len(left), len(right)))
mergesort(left)
mergesort(right)
merge(left, right, Array)
return Array
然后只需要调用以下来比较输出:
mergesort(Array)
mergesort(unsorted)
【问题讨论】:
-
你试过
mid = n // 2i/oint(np.round(mid))吗? -
有趣的是,您的
unsorted是array而Array是list。 -
嗨,这是一个很好的舍入解决方法,但不幸的是结果仍然相同。
-
@KlausD。是的,Python 数组只是一个列表,对吧?但从根本上说,我不确定他们为什么会产生如此不同的结果。一个有效,另一个无效。
-
不,
list不仅仅是array的名称。它们唯一的共同点是它们使用[ ]语法并且它们是项的有序集合。
标签: python arrays sorting mergesort