python - 使用递归快速排序附加到列表?

标签 python recursion quicksort

我在让这个快速排序函数返回实际列表而不是一项一项地返回项目时遇到了一些困难。排序逻辑工作正常,但它没有返回数组。有没有办法添加一个持久列表,将项目附加到每个循环?

import random


def quick_sort_2(input_arr):

    if len(input_arr) == 1:
        print(input_arr[0])
        return input_arr[0]
    elif len(input_arr) == 0:
        return
    else:
        pivot = input_arr[0]
        i = 0
        left_arr = []
        right_arr = []
        while i < len(input_arr):
            if input_arr[i] < pivot:
                left_arr.append(input_arr[i])
                i += 1
            elif input_arr[i] > pivot:
                right_arr.append(input_arr[i])
                i += 1
            else:
                i += 1
        quick_sort_2(left_arr)
        print(pivot)
        quick_sort_2(right_arr)


quick_sort_2([3, 5, 2, 6, 1, 7, 0])

快速旁注是,我在这里使用 print,但实际上我想以某种方式使用 return。

最佳答案

解决方案是在函数的每个分支中实际返回一个结果列表。如果没有什么可排序的,它可能是空列表。否则,它是所有小于主元元素的元素的排序列表,加上主元元素,以及所有大于或等于(或不小于)主元元素的元素的排序列表。

def quick_sort_2(items):
    items = iter(items)
    try:
        pivot = next(items)
    except StopIteration:
        return []
    else:
        left_items = []
        right_items = []
        for item in items:
            (left_items if item < pivot else right_items).append(item)
        return quick_sort_2(left_items) + [pivot] + quick_sort_2(right_items)

关于python - 使用递归快速排序附加到列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50587433/

相关文章:

sorting - 没有累加器可以写这个吗?

c++ - 维护递归计数

java - 我的 Java 快速排序实现有什么问题?

python - 日期时间属性和亲子关系的 NDB 索引

python - 洗牌参数

javascript - 输出JSON的javascript中的递归函数

python - 尝试使用 python 实现快速排序,但它不起作用

java - 在java快速排序中添加额外的排序条件

python - JupyterHub openssl 自签名证书 "Error: error:0906D06C:PEM routines:PEM_read_bio:no start line"

python - 如何使用 Python Selenium Webdriver 通过默认 Chrome 配置文件打开 URL