所以,我的老师,一个有点过于沉迷于为每项家庭作业添加细节的人,已经给出了一个我无法想办法的任务。
它是关于Python的快速排序,他希望我们构建一个快速排序列表的功能,同时打印出每一步。到目前为止,我一直在使用List Comprehension方法进行快速排序,但我无法弄清楚在哪里以及如何放置我的print语句。
这是我目前使用的代码: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) 之前返回它,但它打印的输出与我想要的不匹配。考虑到这一点,这是有道理的,因为List Comprehension方法尝试通过将列表分成几部分对列表进行排序,并且我的函数在每个较小的分区上重新调用自己,直到其中没有剩余元素。
我希望,例如,当我输入一个列表时,[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是pivot,没有值,返回[]和退出递归
也许这可以通过定义另一个函数来完成,该函数将存储一个额外的列表并在每次递归发生时更新它quick_sort(),但我还没有想到这一点。