快速排序算法Python错误
我正在尝试使用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
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
命令,以查看这些列表的外观。