快速排序算法Python错误

快速排序算法Python错误,python,quicksort,Python,Quicksort,我正在尝试使用Python实现快速排序。 这是我的代码: import random def quickSort(lst): randomIndex = random.randint(0,len(lst)-1) pivot = lst[randomIndex] greater = [] less = [] equal = [] if len(lst) > 1: for num in lst: if n

我正在尝试使用Python实现快速排序。 这是我的代码:

import random

def quickSort(lst):
    randomIndex = random.randint(0,len(lst)-1)
    pivot = lst[randomIndex]
    greater = []
    less = []
    equal = []
    if len(lst) > 1:
        for num in lst:
            if num > pivot:
                greater.append(num)
            elif num == pivot:
                equal.append(num)
            else:
                less.append(num)
        return quickSort(less)+equal+quickSort(greater)
    else:
        return lst

def main():
    lst = [1000000,100000,1000,10000,100,10]
    sortedLst = quickSort(lst)
    print("Quicksorted List: ", sortedLst)

main()
为什么当我运行代码时,它会说它遇到了以下错误:

ValueError: empty range for randrange() (0,0, 0)

唯一的问题是,您甚至尝试选择randomIndex,当
lst
为空时,只需将您的初始化移动到
if
条件中,确保它们为非空

import random

def quickSort(lst):
    if len(lst) > 1:
        randomIndex = random.randint(0,len(lst)-1)
        pivot = lst[randomIndex]
        greater = []
        less = []
        equal = []
        for num in lst:
            if num > pivot:
                greater.append(num)
            elif num == pivot:
                equal.append(num)
            else:
                less.append(num)
        return quickSort(less)+equal+quickSort(greater)
    else:
        return lst

def main():
    lst = [1000000,100000,1000,10000,100,10]
    sortedLst = quickSort(lst)
    print("Quicksorted List: ", sortedLst)

main()

唯一的问题是,您甚至尝试选择randomIndex,当
lst
为空时,只需将您的初始化移动到
if
条件中,确保它们为非空

import random

def quickSort(lst):
    if len(lst) > 1:
        randomIndex = random.randint(0,len(lst)-1)
        pivot = lst[randomIndex]
        greater = []
        less = []
        equal = []
        for num in lst:
            if num > pivot:
                greater.append(num)
            elif num == pivot:
                equal.append(num)
            else:
                less.append(num)
        return quickSort(less)+equal+quickSort(greater)
    else:
        return lst

def main():
    lst = [1000000,100000,1000,10000,100,10]
    sortedLst = quickSort(lst)
    print("Quicksorted List: ", sortedLst)

main()

错误是相当自爆的。您在空范围上调用random,因此在某个点上您的代码调用quicksort([]),并且您尝试获取randomIndex/pivot,即使列表为空也是如此,这很可能是因为
较大的
较小的
中有一个元素。因此,当您将
randomIndex
设置为从0到列表长度的范围时,您将得到
random.randint(0,0)
。我建议在
return
语句之前添加一个
print
命令,看看这些列表是什么样子的。这个错误是非常自爆的。您在空范围上调用random,因此在某个点上您的代码调用quicksort([]),并且您尝试获取randomIndex/pivot,即使列表为空也是如此,这很可能是因为
较大的
较小的
中有一个元素。因此,当您将
randomIndex
设置为从0到列表长度的范围时,您将得到
random.randint(0,0)
。我建议在
return
语句之前添加
print
命令,以查看这些列表的外观。