python - 无法在下面的 python 代码中进行插入排序工作

标签 python algorithm sorting error-handling insertion

我有以下代码试图对数组“numbers”执行插入排序。 (并打印排序后的数组)

算法中似乎存在逻辑错误,但我无法发现它,因为它似乎是有道理的。

任何人都可以使用现有代码提出解决方案并提供适当的解释吗?

numbers=[4,1,2,5,3]
for i in range(len(numbers)-1):
    position=1
    while position>0 and numbers[position]<numbers[position-1]:
      #print("Position:",numbers[position])
      #print("Position-1:",numbers[position-1])
      temp=numbers[position-1]
      numbers[position-1]=numbers[position]
      numbers[position]=temp
      #print("New value of position",numbers[position])

      position=position+1
print(numbers)

print("Insertion Sort)

最佳答案

只需对您的程序进行简单修改,您的插入排序就可以工作。

while position>0 将始终为真,因为 position 是递增的。

numbers=[4,1,2,5,3]
last_num = len(numbers)-1
for i in range(last_num):
    position=i
    while position<last_num:
        if numbers[position]>numbers[position+1]:
            temp=numbers[position+1]
            numbers[position+1]=numbers[position]
            numbers[position]=temp
        position+=1

print(numbers)

print("Insertion Sort")

打印:

[1, 2, 3, 4, 5]
Insertion Sort

编辑: position>0 你需要

numbers=[4,1,2,5,3]
last_num = len(numbers)-1
for i in range(last_num):
    position=last_num
    while position>0:
        if numbers[position]<numbers[position-1]:
            temp=numbers[position-1]
            numbers[position-1]=numbers[position]
            numbers[position]=temp
        position-=1

print(numbers)

print("Insertion Sort")

关于python - 无法在下面的 python 代码中进行插入排序工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833581/

相关文章:

c++ - <algorithm> 排序自定义条件

c# - 提高字符串数组自定义排序的性能

python - gevent.wait 和 gevent.joinall 有什么区别?

c# - 检测图何时重新收敛的算法(类似于公共(public)子树?)

c - 反转字符串时获取 "Segmentation fault Core Dumped Error "

c# - HackerRank 攀升排行榜

arrays - 最快算法的大 O 打印长度为 n 的未排序数组和长度为 m 的排序数组之间的公共(public)元素

python - PyDev 导入错误

python - 如何在python中为url参数编码字符串

python - 从 Python 查询 Couchbase 存储桶