感谢您抽出时间来阅读这篇文章:)我正在用python实现我自己的quicksort版本,我也在尝试让它在一些限制条件下工作,这是以前学校作业的一部分。因为我不知道为什么我在项目中没有使用它。在
对于整数和字符串,它工作得很好,但我无法将其应用于CounterList(),后者是一个节点列表,每个节点中都包含任意整数和字符串,即使我只是按这些节点中包含的整数进行排序。在
粘贴箱:
from classes_1 import CounterNode, CounterList
def bulk_append(array1, array2):
# takes all the items in array2 and appends them to array1
itr = 0
array = array1
while itr < len(array2):
array.append(array2[itr])
itr += 1
return array
def quickSort(array):
lss = CounterList()
eql = CounterList()
mre = CounterList()
if len(array) <= 1:
return array # Base case.
else:
pivot = array[len(array)-1].count # Pivoting on the last item.
itr = 0
while itr < len(array)-1:
# Essentially editing "for i in array:" to handle CounterLists
if array[itr].count < pivot:
lss.append(array[itr])
elif array[itr].count > pivot:
mre.append(array[itr])
else:
eql.append(array[itr])
itr += 1
# Recursive step and combining seperate lists.
lss = quickSort(lss)
eql = quickSort(eql)
mre = quickSort(mre)
fnl = bulk_append(lss, eql)
fnl = bulk_append(fnl, mre)
return fnl
我知道这可能很简单,但我似乎看不出问题所在。 (以最后一项为中心)
以下是我使用的测试:
^{pr2}$以及由此产生的反列表:
['qck': 1, 'Fuu': 3, 'Eek': 5, 'Doh': 7, 'Cah': 9, 'ack': 11]
你可以看出,缺少多个值? 不管怎样谢谢你的建议和时间。在
代码中有两个错误:
您不需要“eql=quickSort(eql)”行,因为它包含所有相等的值,所以不需要排序。
在每次递归调用中,您都会丢失pivot(缺少条目的原因),因为您没有将它附加到任何列表中。你需要把它附加到eql中。所以在下面所示的代码行之后:
pivot=array[len(array)-1].计数
插入此行:
另外,请从代码中删除以下行,因为它有时可能会导致递归深度(如果选择了任何重复值作为枢轴,则仅对具有某些重复值的数组):
^{pr2}$相关问题 更多 >
编程相关推荐