我正在尝试实现快速排序算法,但我一直在使列表索引超出范围。
快速排序的范围究竟超出范围(数组,左,Pi VOT-1)?
set makrprg=\"C:\\Program\ Files\ (x86)\\Microsoft\ Visual\ Studio\ 14.0\\VC\\bin\\cl.exe\"
错误讯息:
def partition(array,left,right):
#If pivot is not on leftmost, swap to make it leftmost
Pivot = array[0]
i = left+1
for j in range(i,right):
if array[j] < Pivot:
#Swap array[j] and array[i]
array[j], array[i] = array[i], array[j]
i += 1;
#Swap pivot and A[i-1]
array[Pivot], array[i-1] = array[i-1], array[Pivot]
return Pivot
def quicksort(array,left,right):
# Base case
if len(array) <= 1:
return array
#Choose pivot
Pivot = partition(array,left,right);
#Partition array around a pivot
#Recursive call
quicksort(array, left, Pivot-1)
quicksort(array, Pivot + 1, right)
print quicksort([1,5,3,4,9,10],0,5)
答案 0 :(得分:3)
在partition()
,
Pivot = array[0]
这里Pivot
看起来像pivot元素的值。然而,
#Swap pivot and A[i-1]
array[Pivot], array[i-1] = array[i-1], array[Pivot]
这里你用它作为数组的索引。因此,它很可能超出合法的数组索引范围。
答案 1 :(得分:2)
在第三次迭代期间,pivot
和array
的值如下所示
[10, 1, 3, 4, 9, 5] 10
您尝试获取array[Pivot]
因为它只有六个元素,所以只有index out of range error is thrown
答案 2 :(得分:2)
可能这可能有所帮助。
Func<Identifiable,bool> = iIdentifiable => iIdentifiable.Id == 1