所以,我的老师,一个有点过于沉迷于在每个家庭作业中添加细节的人,给了一个我想不到的方法来完成一个任务。
这是关于Python中的快速排序,他希望我们构建一个函数,在打印出每个步骤时快速排序列表。到目前为止,我一直在使用列表理解方法进行快速排序,但我还不能确定将打印语句放在哪里以及如何放置。
下面是我目前使用的代码:
def quick_sort(lst):
if lst == []: return []
pivot = lst[0]
left = [x for x in lst[1:] if x < pivot]
right = [x for x in lst[1:] if x > pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
我尝试在返回python quick_sort(left) + [pivot] + quick_sort(right)
之前打印它,但它打印的输出与我想要的不匹配。仔细想想,这是有意义的,因为列表理解方法试图通过将列表分成几个部分来对列表进行排序,并且我的函数在每个较小的分区上重新调用自身,直到其中没有元素。
我希望,当我输入一个列表时,例如[5, 1, 4, 3, 2]
,程序至少应该以这样的方式打印出步骤(考虑我将第一个元素作为轴心):
>>> Enter the list: 5, 1, 4, 3, 2
[1, 4, 3, 2, 5]
5是透视的,左边是较小的值,现在应该对[1, 4, 3, 2]
进行排序
[1, 4, 3, 2, 5]
1是透视的,较大的值位于右侧,现在应该对[4, 3, 2]
进行排序
[1, 3, 2, 4, 5]
4是透视的,左边是较小的值,现在应该对[3, 2]
进行排序
[1, 2, 3, 4, 5]
3是透视的,左边是较小的值,现在应该对[2]
进行排序
[1, 2, 3, 4, 5]
2是透视的,没有剩余的值,返回[]
,并退出递归
也许这可以通过定义另一个函数来完成,该函数将存储一个额外的列表,并在quick_sort()
中每次发生递归时更新它,但我还没有想到这一点。
发布于 2019-05-24 05:49:21
然而,这里有一个部分尝试来安抚你的讲师,突出你的方法:
def quick_sort(lst):
if lst == []: return []
pivot = lst[0]
left = [x for x in lst[1:] if x < pivot]
right = [x for x in lst[1:] if x > pivot]
print(lst, pivot, "is pivot", left, "and", right, "should be sorted")
new_list = quick_sort(left) + [pivot] + quick_sort(right)
print("NEW", new_list)
return new_list
quick_sort([4, 1, 5, 3, 2])
https://stackoverflow.com/questions/56283221
复制相似问题