Python实现冒泡排序对列表排序后返回None问题求解
问题排查与修复
问题1:返回None的直接原因
Python函数如果没有显式声明return返回值,默认会返回None。你的_sort函数没有写任何返回逻辑,所以赋值给_sorted的结果自然就是None。
问题2:冒泡排序逻辑错误
你写的元素交换代码不完整,仅修改了nums[j+1]的值,没有给nums[j]赋值,就算加了返回值也无法完成排序:
# 错误的交换逻辑 if nums[j] > nums[j+1]: temp = nums[j+1] nums[j+1] = temp
正确的交换逻辑应该是把nums[j]和nums[j+1]的值互换。
修复方案
方案1:使用原地修改逻辑(和Python内置list.sort()行为一致)
不需要接收返回值,排序后直接打印原数组即可:
arr = ["A", "B", "C", "D", "Z", "Y"] def _sort(nums): for i in range(len(nums)-1, 0, -1): for j in range(i): if nums[j] > nums[j+1]: # 完整交换两个元素 temp = nums[j] nums[j] = nums[j+1] nums[j+1] = temp _sort(arr) print(arr) # 输出结果:['A', 'B', 'C', 'D', 'Y', 'Z']
方案2:给函数加返回值
如果需要保留原数组不变,返回新的排序后数组,可以先拷贝传入的列表再操作,最后返回结果:
arr = ["A", "B", "C", "D", "Z", "Y"] def _sort(nums): # 拷贝原数组,不修改原值 sorted_nums = nums.copy() for i in range(len(sorted_nums)-1, 0, -1): for j in range(i): if sorted_nums[j] > sorted_nums[j+1]: sorted_nums[j], sorted_nums[j+1] = sorted_nums[j+1], sorted_nums[j] # 显式返回排序后的数组 return sorted_nums _sorted = _sort(arr) print(_sorted) # 输出结果:['A', 'B', 'C', 'D', 'Y', 'Z']
内容的提问来源于stack exchange,提问作者Freduah Gideon
相关产品推荐
相关产品推荐

