如何在python中使用random pivot实现快速排序

2024-10-01 04:58:02 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我有这个,但当我试图打印结果,我只是得到一个随机列表,而不是有组织的列表,你知道我该如何解决它吗

import random
lista = [8,12,3,11,5,9,10,4,15,7]

def particionado(lista):

    pivote = random.choice(lista)
    menores = []
    mayores = []
    
    for i in range(1, len(lista)):
        if lista[i] < pivote:
            menores.append(lista[i])
        else:
            mayores.append(lista[i])
            
    return quicksort(menores), pivote , quicksort(mayores)

def quicksort(lista):
    if len(lista) < 2:
        return lista

    menores, pivote, mayores = particionado(lista)
    return menores + [pivote] + mayores

# result
: quicksort(list)
: [7, 9, 9, 9, 9, 9, 9, 9, 9, 15]

Tags: import列表lenreturnifdefrandomchoice
1条回答
网友
1楼 · 发布于 2024-10-01 04:58:02

您可以随机选择轴,但此处:

for i in range(1, len(lista)):

假设枢轴处于零位。我的建议是:

pivote_idx = random.randrange(len(lista))
pivot = lista[pivote_idx]

for i in range(len(lista)):
    if i == pivote_idx: continue
    ...

或者,您可以将轴交换到列表中的第一个位置,但我假设您不能修改输入,因为您有意不这样做

相关问题 更多 >