仅用for循环实现Python插入排序,求代码正确性验证
关于你编写的仅用for循环的插入排序代码的反馈
你的这段代码确实能输出正确的排序结果,但它的实现逻辑和标准插入排序的核心思路有差异,具体分析如下:
你的代码逻辑
对于每个从索引1开始的元素temp,你遍历它前面的所有已排序元素:
- 只要发现前面的元素比
temp大,就直接交换当前元素和前面的元素 - 这种方式相当于把
temp逐步“冒泡”到前面的正确位置,每次交换后,原temp位置的元素会更新为被交换过来的值,继续和更前面的元素比较
这种写法能得到正确结果,但效率比标准插入排序低——因为每次交换是三次赋值操作,而标准插入排序是先移动元素(单次赋值),最后才把temp放到正确位置。
标准仅用for循环的插入排序实现
如果要严格遵循插入排序的核心逻辑(取出元素、移动比它大的元素、插入到正确位置),可以这样写:
def insertionSort(lst): for i in range(1, len(lst)): temp = lst[i] # 从当前位置向前遍历已排序区间 for j in range(i, 0, -1): if lst[j-1] > temp: # 把比temp大的元素向后移动 lst[j] = lst[j-1] else: # 找到插入位置,终止循环 break # 将temp插入正确位置 lst[j] = temp return lst
总结
你的代码功能上是有效的,能完成排序需求;如果只是练习用for循环实现排序,它完全可行;但如果是要严格实现插入排序算法,建议参考上面的标准写法。
内容的提问来源于stack exchange,提问作者me_zzz
相关产品推荐
相关产品推荐

