python - 为什么我的插入排序算法乱序返回
问题描述
我正在使用 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。所以这本书是正确的,但你也是正确的(因为索引约定的不同)。
推荐阅读
- ios - 无法接收广告并出现错误:请求错误:没有广告可展示
- javascript - 查找两个对象数组之间的共同值并存储为对象数组
- python - python - 根据用户的最大和最小输入返回结果
- python - tkinter Python 项目计算器等号按钮
- firebase - 如果元素已经存在于数组字段中,arrayUnion 是否会在 Firestore 中花费写入计数?
- r - 将列中的每个因子转换为 R 中频率第二高的因子
- java - 关于在 jmeter 中运行的 postgres 函数测试的问题
- php - 如何在 Guzzle 中设置 Authorization HTTP 标头?
- json - 将 shell 变量传递给 JQ 并使用它构建一个键名
- selenium - Robot Framework:按文本获取元素