Python 快速排序程序,哪里出错了呢?主要问题是递归调用出错,为何改变不了原先的排序?

问答 匡时济世 ⋅ 于 2019-07-22 17:50:28 ⋅ 最后回复由 青牛 2019-07-23 14:13:33 ⋅ 1595 阅读

原始代码如下:

def QuickSort(lis):
print('新的lis:{}'.format(lis))
n = len(lis)
if n>1:
left = 1
right = n - 1
while left < right:
while lis[left] < lis[0] and left < right:
left += 1
while lis[right] > lis[0] and left < right:
right -= 1
lis[right], lis[left] = lis[left], lis[right]
left += 1
right -= 1

print(left,right)

    if left != right:
        left -= 1
        right += 1
    print(left, right)
    pivot = lis[0]
    if lis[right] < lis[0]:
        lis[right], lis[0] = lis[0], lis[right]
    else:
        lis[left], lis[0] = lis[0], lis[left]

    print(lis[:left])
    lis = QuickSort(lis[:left]) + [pivot] + QuickSort(lis[right:])

list1 = [6, 8, 7,3]

list1 = [4, 7, 6, 5, 3, 2, 8, 1]

print('原始序列为:{}'.format(list1))
QuickSort(list1)

print('排序后为:{}'.format(list1))

删除递归程序代码:

lis = QuickSort(lis[:left]) + [pivot] + QuickSort(lis[right:])
第一遍快排运行结果是对的:

排序后为:[3, 1, 2, 4, 5, 6, 8, 7]

我想对接下来的【3 1 2】调用递归,也就是QuickSort(lis[:left])

但是,为何最终结果不改变lis的顺序呢??

好奇怪

哪里出错了呢???

成为第一个点赞的人吧 :bowtie:
回复数量: 1
  • 青牛 国内首批大数据从业者,就职于金山,担任大数据团队核心研发工程师
    2019-07-23 14:13:33

    把所有的代码贴一下把 现在这个格式看得很乱

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter