首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中对给定列表进行快速排序,同时打印每个步骤

在Python中对给定列表进行快速排序,同时打印每个步骤
EN

Stack Overflow用户
提问于 2019-05-24 05:36:19
回答 1查看 376关注 0票数 3

所以,我的老师,一个有点过于沉迷于在每个家庭作业中添加细节的人,给了一个我想不到的方法来完成一个任务。

这是关于Python中的快速排序,他希望我们构建一个函数,在打印出每个步骤时快速排序列表。到目前为止,我一直在使用列表理解方法进行快速排序,但我还不能确定将打印语句放在哪里以及如何放置。

下面是我目前使用的代码:

代码语言:javascript
复制
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],程序至少应该以这样的方式打印出步骤(考虑我将第一个元素作为轴心):

代码语言:javascript
复制
>>> 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()中每次发生递归时更新它,但我还没有想到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 05:49:21

然而,这里有一个部分尝试来安抚你的讲师,突出你的方法:

代码语言:javascript
复制
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])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56283221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档