如果面试时排序的数组是自己手动输入的,那这里有一个大坑需要避开
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]