簡體   English   中英

為什么我的插入排序算法返回亂序

[英]Why does my insertion sort Algorithm return out of order

我正在使用 Python 創建一個基本的插入排序算法。

我的教科書在這里顯示了插入排序算法的偽代碼。

如果我使用 python 3 遵循該約定,則會生成以下代碼:

def insertionSort(arr):
#Traverse through 1 to len array
   for j in range(1, len(arr)):
       key = arr[j]
       i = j-1
       while i >0 and arr[i] > key:  #this line seems incorrect?
           arr[i+1] = arr[i]
           i = i-1
       arr[i+1] = key
   return arr

如果我設置 arr = [12,11,13,5,6] 結果返回為 [12,5,6,11,12,13] 這顯然不是正確的排序。

在調整算法一段時間后,將我標記為不正確的行更改為while i>=0 and arr[i] > key:算法給出了正確的輸出。 我的書省略了等號是錯誤的還是我不理解偽代碼在我的教科書中是如何運行的?

看起來您幾乎正確地將本書的算法翻譯成 Python。 如您所見,本書的算法是基於 1 的,而 Python 是基於 0 的。

這本書的算法從索引 2 開始,但你必須從索引 1 開始。

這也意味着保持 while 循環直到第一個索引。 在本書的例子中,它是 1,而在你的例子中,它在 Python 中應該是 0。 所以這本書是正確的,但你也是正確的(因為索引約定的差異)。

def insertionSort(arr): #Traverse through 1 to len array for j in range(1, len(arr)): key = arr[j] i = j-1 # you need to change here to i>=0 while i >= 0 and arr[i] > key: #this line seems incorrect? arr[i+1] = arr[i] i = i-1 arr[i+1] = key return arr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM