索引超出范围 - Python中的Quicksort

时间:2015-07-14 06:17:07

标签: python python-2.7 sorting quicksort

我正在尝试实现快速排序算法,但我一直在使列表索引超出范围。

快速排序的范围究竟超出范围(数组,左,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)

3 个答案:

答案 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)

在第三次迭代期间,pivotarray的值如下所示

[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