Python 为什么我的插入排序算法会出现问题

Python 为什么我的插入排序算法会出现问题,python,algorithm,sorting,insertion-sort,insertion,Python,Algorithm,Sorting,Insertion Sort,Insertion,我正在使用Python创建一个基本的插入排序算法 我的教科书展示了插入排序算法的PSUDEO代码 如果我使用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

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

我的教科书展示了插入排序算法的PSUDEO代码

如果我使用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],这显然不是正确的排序

调整算法一段时间后,将标记为不正确的行更改为
,而I>=0且arr[I]>键:
该算法给出了正确的输出。我的书中省略了等号是不正确的,还是我不理解psuedocode在我的课本中是如何运行的?

def insertionSort(arr):
#遍历1到len数组
对于范围(1,len(arr))内的j:
键=arr[j]
i=j-1
#您需要在此处更改为i>=0
而i>=0和arr[i]>key:#这行似乎不正确?
arr[i+1]=arr[i]
i=i-1
arr[i+1]=键
返回arr
def插入端口(arr):
#遍历1到len数组
对于范围(1,len(arr))内的j:
键=arr[j]
i=j-1
#您需要在此处更改为i>=0
而i>=0和arr[i]>key:#这行似乎不正确?
arr[i+1]=arr[i]
i=i-1
arr[i+1]=键
返回arr

看起来您基本上正确地将本书的算法翻译成了Python。如您所见,本书的算法是基于1的,而Python是基于0的

本书的算法从索引2开始,但必须从索引1开始


这也转化为保持while循环一直运行到第一个索引。在本书中,这是1,在Python中,这应该是0。因此,这本书是正确的,但您也是正确的(因为索引约定不同)。

看起来您基本上正确地将这本书的算法翻译成了Python。如您所见,本书的算法是基于1的,而Python是基于0的

本书的算法从索引2开始,但必须从索引1开始


这也转化为保持while循环一直运行到第一个索引。在本书中,这是1,在Python中,这应该是0。因此,这本书是正确的,但你也是正确的(因为索引惯例不同)。

看起来你的更正是正确的;如果你的书漏掉了
=
,那就错了。@khelwood,看看屏幕截图。本书使用基于1的索引。两者都是对的。@bourbaki4481472是的,我看到了你的答案。非常敏锐。看起来你的纠正是对的;如果你的书漏掉了
=
,那就错了。@khelwood,看看屏幕截图。本书使用基于1的索引。两者都是对的。@bourbaki4481472是的,我看到了你的答案。非常敏锐。