我想写一个快速排序的实现,其中的枢轴元素是伪随机的。我在网上看过各种帖子,很多都是关于这个帖子的,但我仍然有问题。这里是我的代码:快速排序python实现
def quickSort(lst, a, b):
if a < b:
pivot = partition(lst, a, b)
quickSort(lst, a, pivot-1)
quickSort(lst, pivot+1, b)
return lst
def partition(lst, a ,b):
pivot = random.randint(a,b)
for i in range(a,b):
if lst[i] < lst[b]:
lst[i],lst[pivot] = lst[pivot],lst[i]
pivot += 1
lst[pivot],lst[b] = lst[b],lst[pivot]
return pivot
此代码实际上与提供给这个问题的答案代码:quick sort python recursion,但不是使用start
元素为支点,我使用随机的。我不断收到此错误:
in partition
lst[pivot],lst[b] = lst[b],lst[pivot]
IndexError: list index out of range
我已经看过那个了,我想这意味着我试图引用不存在或出名单的范围列表的元素。这是为什么发生?
我也用在这个环节上实现快速排序的风格尝试,我得到同样的错误:Quicksort implementation in Python
' random.randint'从'[a,b]'生成一个随机数。在传递给'randint'之前,你可能需要从'b'中减去1。 – vaultah
@vaultah刚刚尝试过。得到完全相同的错误 –
那么,如果你只是'打印(len(lst),b,pivot)',你应该能够看到问题是什么 –