问题描述
我正在使用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,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