关于插入排序,为什么变量赋值和不赋值结果不同?

题目描述

关于插入排序

题目来源及自己的思路

相关代码

def insert_sort1(ilist):
    for i in range(1,len(ilist)):
        j=i-1
        while j>=0 and ilist[i]<ilist[j]:
            ilist[j+1]=ilist[j]
            j-=1
        ilist[j+1]=ilist[i]
    return ilist
print(insert_sort1(list1))

def insert_sort2(ilist):
    for i in range(1,len(ilist)):
        k=ilist[i]
        j=i-1
        while j>=0 and k<ilist[j]:
            ilist[j+1]=ilist[j]
            j-=1
        ilist[j+1]=k
    return ilist
print(insert_sort2(list1))

你期待的结果是什么?实际看到的错误信息又是什么?

我以为2个程序运行结果一样,实际情况是insert_sort1没有排序成功,为什么insert_sort2,就加了一个k=ilist[i] 就能排序成功,在insert_sort1中直接使用ilist[i]不能吗?请问为什么。

阅读 1.7k
2 个回答

因为在 while 循环里,ilist[i] 会被改变(当 j=i-1 的时候)。

k用来暂存ilist[i]原始值,因为在循环里被改变了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题