【数组】【排序】八大排序算法--冒泡排序及扩展

如果面试时排序的数组是自己手动输入的,那这里有一个大坑需要避开

def bubbleSort(ls):
    if not ls:
        return ls
    for i in range(len(ls)):
        for j in range(len(ls) - i - 1):
            if ls[j] > ls[j + 1]:
                ls[j], ls[j + 1] = ls[j + 1], ls[j]


if __name__ == "__main__":
    args = input("请输入数组,以,号分隔:")
    ls = args.split(",")
    bubbleSort(ls)
    print("排序后的数组:")
    print(ls)

看起来没有问题,也是排序的,但是,注意,这里排序是按照字符串进行排序的,从交互命令输入的内容都是字符
请输入数组,以,号分隔:7,6,8,3,1,2
排序后的数组:
['1', '2', '3', '6', '7', '8']

只要已输入类似3,2,23这样的数组值,按输出的将是2,23,3这样的排序结果

正确排序,应当先讲字符串转成整形后再处理(这里不考虑输入字母、特殊字符,或者分隔符使用错误等不能转整形的情况)

def bubbleSort(ls):
    if not ls:
        return ls
    for i in range(len(ls)):
        for j in range(len(ls) - i - 1):
            if ls[j] > ls[j + 1]:
                ls[j], ls[j + 1] = ls[j + 1], ls[j]


if __name__ == "__main__":
    while True:
        args = input("请输入数组,以,号分隔:")
        if not args:
            print("输入错误,请退出后重新输入")
            continue
        else:
            break
    ls = args.split(",")
    for i in range(len(ls)):
        ls[i] = int(ls[i])
    bubbleSort(ls)
    print("排序后的数组:")
    print(ls)

这时候排序就对了

请输入数组,以,号分隔:3,2,23
排序后的数组:
[2, 3, 23]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值