2017-11-12 22 views
1

こんにちは、私はPythonを初めて使いました。クイックソートアルゴリズムのために以下のコードを実装しました。トレースバックがあります。 "IndexError:リストのインデックスが範囲外です"。python3クイックソートリストのインデックス範囲外

誰でも助けてください。私は一晩中苦労した!

ありがとうございます!エラーが、あなたの並べ替えロジックが間違っている固定

def quicksort(array,l,r): 
    n = len(array) 
    if n == 1 or n == 0: 
     return array 
    else: 
     p = array[l] 
     i = l + 1 
     for j in range(l+1, r): 
      if array[j] < p: 
       array[i], array[j] = array[j], array[i] 
       i = i + 1 
     array[l], array[i-1] = array[i-1], array[l] 
     array[l:i-1] = quicksort(array[l:i-1],l,i-1) 
     array[i:r] = quicksort(array[i:r],i,r) 
     return array 

testarray = [1,3,4,5,2] 
sortedarray = quicksort(testarray,0,5) 
+0

が考えてR:[I:R]クイックソート(配列[Iを= ]、i、r) "から"配列[i:r] =クイックソート(配列[i:r]、l、ri) "というコードが動作します。同じ問題に遭遇する可能性のある人のために。 –

答えて

1

、私は「配列を変更

def quicksort(array,l,r): 
    n = len(array) 
    if n == 1 or n == 0: 
     return array 
    else: 
     p = array[l] 
     i = l + 1 
     for j in range(1, r-1): # r is length of array; so range should be one less 
      if array[j] < p: 
       array[i], array[j] = array[j], array[i] 
       i = i + 1 
     array[l], array[i-1] = array[i-1], array[l] 
     array[l:i-1] = quicksort(array[l:i-1],l,i-1) 
     array[i:r] = quicksort(array[i:r],i,r) 
     return array 

testarray = [1,3,4,5,2] 
sortedarray = quicksort(testarray,0,5) 

print(sortedarray) 

出力

[1, 3, 2, 4, 5] 
+0

Thx!私は "array [i:r] = quicksort(array [i:r]、i、r)"はすべてのサブアレイの長さがrであることを示しています。 –

関連する問題