【问题标题】:Quick Sort Recursion in PythonPython中的快速排序递归
【发布时间】:2020-04-18 17:05:20
【问题描述】:

我一直在研究下面的快速排序算法,一直无法理解为什么需要在括号中返回 [pivot] 以及为什么需要返回它。函数的输出不是只需要通过现有函数运行新数组(更少和更大),然后像第一次调用它一样获取枢轴值吗?

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr.pop()

    greater = []
    less = []
    for i in arr:
        if i > pivot:
            greater.append(i)
        else:
            less.append(i)
    return quick_sort(less) + [pivot] + quick_sort(greater)

arr1 = [7,8,9,6,5,4,7,8,9]

quick_sort(arr1)

【问题讨论】:

  • 因为您要将列表合并为一个
  • @Sayse 但为什么首先需要返回枢轴值?
  • 我不确定你在问什么,你需要它,否则每次调用函数时你都会从列表中丢失一个元素
  • pop() 从列表中删除一个元素,所以你必须明确地将它放回返回的列表中,否则每次递归都会丢失一个元素。

标签: python algorithm quicksort


【解决方案1】:

解决方案是尝试将三个数组合并为一个。例如:

mergedArr = [1,2,3]+ [4] + [5,6,7] print(mergedArr) # [1, 2, 3, 4, 5, 6, 7]

将枢轴包裹在括号内只会将其显式转换为列表,以便python程序可以将所有内容附加在一起

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2021-06-26
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多