为什么我的插入排序算法无序返回

问题描述

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

我的教科书显示了插入排序算法here的伪代码

如果我使用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,6,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