2301_80606200 2024-04-14 17:13 采纳率: 0%
浏览 4

插入排序python我的排序代码无法正常排序,如何解决?

插入排序python
我的排序代码无法正常排序,会重复同一元素,我找不到我哪错了

# 定义函数 insertion_sort 接受参数 list_sort,并返回插入排序结果。
def insertion_sort(list_sort):
    for i in range(1, len(list_sort)):
        x = list_sort[i]
        for j in range(i - 1, 0, -1):  # 从 i-1 开始,直到 j 为 0
            if list_sort[j] > x:
                list_sort[j + 1] = list_sort[j]  # 向右移动元素
            else:
                list_sort[j + 1] = x  # 插入 x
                break
    return list_sort


# 测试代码
list_sort = list(map(int, input().split()))
x = insertion_sort(list_sort)
print(x)

我的输入是14 15 171 23 1 4 67 87 46 27 252 345 4 25 33 45 98
输出是[14, 14, 14, 14, 15, 23, 25, 27, 33, 45, 46, 67, 87, 98, 171, 252, 345]
我该怎样才能解决

  • 写回答

5条回答 默认 最新

  • 关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题分析:

    插入排序是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在上述代码中,j 应该从 i-1 开始,直到 j-1,而不是 0,否则第一个元素将被跳过,导致排序失败;同时,插入排序的步骤应该是把当前元素插入到正确的位置,而不是直接把当前元素替换成正确的元素,因此需要增加一个 break 语句来中断内层循环。

    解决方案:

    1.将内层循环的范围改为从 i-1 开始,直到 -1

    2.在找到正确位置后,使用 break 语句中断内层循环。

    修改后的代码如下:

    def insertion_sort(list_sort):
        for i in range(1, len(list_sort)):
            x = list_sort[i]
            j = i-1
            while j>=0 and list_sort[j]>x:
                list_sort[j+1] = list_sort[j]
                j -= 1
            list_sort[j+1] = x
        return list_sort
    

    测试一下:

    14 15 171 23 1 4 67 87 46 27 252 345 4 25 33 45 98
    

    输出:

    [1, 4, 4, 14, 15, 23, 25, 27, 33, 45, 46, 67, 87, 98, 171, 252, 345]
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月14日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?