作爲編程相當新穎的人,我試圖在Python中實現快速排序。不過,我試圖用某種方式來實現它,這似乎並不是最常見的方式。我正在使用CS50中視頻中解釋的技巧:https://www.youtube.com/watch?v=aQiWF4E8flQ實現快速排序CS50風格時發生IndexError
該版本的算法在數組末尾選擇一個透視圖,在開始處放置一個「牆」並開始迭代列表。當它找到一個比樞軸小的物品時,它會將該物品與牆右側的物品交換,並將牆壁向右移動一個位置。當所有物品與樞軸相比時,它將樞軸放在牆上,牆壁向右移動一個位置。這一直持續到牆壁位於陣列的末端。
到目前爲止,我想出了這一點:
def quicksort(alist):
quicksort_helper(alist)
print alist
def quicksort_helper(alist):
wall = 0
while wall < (len(alist) - 1):
pivot = len(alist) - 1
for current in range(wall, pivot):
if alist[current] < alist[pivot]:
alist[current], alist[wall] = alist[wall], alist[current]
wall = wall + 1
alist[wall], alist[pivot] = alist[pivot], alist[wall]
wall = wall + 1
當我嘗試運行我一直有與牆壁和樞軸的數組索引問題的方案,因爲這是錯誤消息我我得到:
IndexError: list index out of range
我試了很多與索引,但我似乎無法弄清楚。
請參閱您的代碼已正確格式化,可能會因爲錯誤的縮進 –
而提供失敗的輸入(並非算法正確,因爲[4,2,1,1,2] '被分類爲[[2,2,4,1,1]')。 –
最後的,無條件的交換必須在'for current ...'循環之後。它在兩個分區之間插入數據透視表。當然,目前的代碼只是分區。您必須將快速排序應用到左側和右側的兩個分區。 –