普通程序员维克 2021-09-05 14:25 采纳率: 0%
浏览 16

尝试用python模拟插入排序算法,为什么这样会有问题?

代码:

def InsertionSort(l): # 插入排序
    process = str(l)
    for j in range(1, len(l)):
        n = l.pop(j)
        for i in range(j):
            if l[j - i - 1] < n:
                l.insert(j - i, n)
                process += ("\n" + str(l))
                continue
            if l[0] > n:
                l.insert(0, n)
                process += ("\n" + str(l))
                continue
    return process


print(InsertionSort([3, 2, 5, 4, 1]))

输出结果:

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

怎么看也没用看出错误啊,求解答

  • 写回答

2条回答 默认 最新

  • wo.austin 2021-09-05 17:01
    关注
    
    def InsertionSort(l): # 插入排序
        process = str(l)
        for j in range(1, len(l)):
            n = l[j]
            for i in range(j-1,-1,-1):
                if l[i] <= n:
                    print("j: %s,i: %s, result:%s"%(j,i,str(l)))
                    continue
                else:
                    l[i],l[j]=n,l[i]
                    n=l[i]
                    print("j: %s,i: %s, result:%s"%(j,i,str(l)))
                     
        return process
     
     
    print(InsertionSort([3, 2, 5, 4, 1]))
    
    #这个是我手机敲的,有缩进问题还是原谅,大致思路就是这样的
    

    插入排序,并不是让你就真正的执行insert,你这样做,列表的遍历就会有问题

    评论

报告相同问题?

问题事件

  • 修改了问题 9月5日
  • 修改了问题 9月5日
  • 创建了问题 9月5日

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题