我试图实现Python合并排序,但在某些方面失败了。我得到的伪代码是准确的,但看起来它是为另一种语言而构建的。在
pseudo需要以下内容
/声明输入数组a大小的数组temp
我不确定这在Python中是如何实现的。总之,代码在下面。 整个想法是我需要对数组/列表进行排序并返回排序后的数组/列表。在
到目前为止,它失败的消息如下。我想说这是因为新的temp数组/列表,但我不确定
Traceback (most recent call last):
File "./mergesort", line 56, in <module>
main()
File "./mergesort", line 52, in main
mergesortbase(array)
File "./mergesort", line 4, in mergesortbase
mergesort(num, 0, len(num)-1)
File "./mergesort", line 10, in mergesort
mergesort(num, low, mid)
File "./mergesort", line 10, in mergesort
mergesort(num, low, mid)
File "./mergesort", line 12, in mergesort
merge(num, low, mid, mid+1, high)
File "./mergesort", line 27, in merge
temp[k] = a[j]
IndexError: list assignment index out of range
注意:对代码进行彻底的修改是没有帮助的,因为我需要使用完全相同的伪代码。在
^{pr2}$
你能复制输入数组吗?在
温度=a.副本()
它的尺寸是一样的。在
如果要将temp中的所有元素初始化为某个值,请使用类似于:
温度=[0]*长度(a)
你的代码有三个错误
temp没有初始化为任何大小,因此k总是给出
list assignment index out of range
第二个while循环用于将剩余元素l1添加到u1,只需运行到u1而不是u2:
第三个while循环将剩余元素从l2添加到u2需要增加}。在
j
,而不是{我很好奇为什么不直接使用Python内置的排序工具,根据您的需要,}。它可能比你自己滚动的东西更有效率(除非你在数据集上使用特定的额外信息,这里似乎不是这样)。你这样做可能是出于教育目的,在这种情况下,你可以随意忽略这段话,但如果你只是想整理一些数据,我就不提内置的东西了。在
sort
或{在任何情况下,您的具体问题似乎是如何“声明输入数组a大小的数组温度”。在
这句话很容易做到:
以下文字说明:
^{pr2}$你现在拥有的是:
这将创建一个大小为零的列表,后跟:
这总是会引起一个问题,因为没有值
k
来处理它。在除此之外,实际的合并还存在缺陷,因为您使用了不正确的变量来处理数组。您已经在逻辑上将某些项绑定在一起,例如将
i
与第一个数组节绑定在一起,j
与第二个数组节绑定在一起,但随后又违反了这一点:即使修复了数组创建,上面的第二个循环也可能会导致问题。它将永远运行(或直到异常,以先到者为准),因为您正在检查
j
,但从不更改它。但是,上述两项均不正确,因此应予以修正。在一旦我使数组的大小正确,进行这两个更改,并在排序之前和之后打印出数组,它看起来会更好一些:
相关问题 更多 >
编程相关推荐