鱼C论坛

 找回密码
 立即注册
查看: 3731|回复: 3

插入排序

[复制链接]
发表于 2021-10-27 23:02:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 luck78 于 2021-10-27 23:11 编辑
  1. def insert_sort(li):
  2.     for i in range(1,len(li)): # i 表示摸到牌的下标
  3.         tmp =li[i]
  4.        j = i-1 # j 表示手里的牌的下标
  5.         while j >=0 and li[j] > tmp:
  6.             li[j+1] = li[j]
  7.             j-=1  # 下标往左边移动一位
  8.         li[j+1] = tmp
复制代码

第4行j = i -1 这里没有看明白请问 i-1是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-27 23:08:31 | 显示全部楼层
本帖最后由 jackz007 于 2021-10-27 23:23 编辑

         这种贴代码的方式会导致你的代码部分缺失(标志是,部分代码变成斜体),你应该把所有代码都贴进代码框中。
  1. def insert_sort(li):
  2.     for i in range(0 , len(li) - 1):                 # i 表示摸到牌的下标
  3.         j = i + 1
  4.         while j > 0 and li[j] < li[j - 1]:
  5.             li[j] , li[j - 1] = li[j - 1] , li[j]    # Python 可以直接交换两个变量,不用中间变量 temp
  6.             j -= 1
复制代码

        此外,可以直接调用列表的方法 sort() 直接代替函数 insert_sort()
  1. li . sort()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-27 23:43:34 | 显示全部楼层
jackz007 发表于 2021-10-27 23:08
这种贴代码的方式会导致你的代码部分缺失(标志是,部分代码变成斜体),你应该把所有代码都贴进 ...

我是在理解这个算法的运行方式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-28 00:30:29 | 显示全部楼层
本帖最后由 jackz007 于 2021-10-28 00:33 编辑
luck78 发表于 2021-10-27 23:43
我是在理解这个算法的运行方式


        注意代码注释,再结合实际输出动态应该可以帮助你理解算法过程
  1. #coding:gbk
  2. li = ['M' , 'L' , 'K' , 'J' , 'I' , 'H' , 'G' , 'F' , 'E' , 'D' , 'C' , 'B' , 'A']
  3. c = 1
  4. for i in range(0 , len(li) - 1):               # 循环 12 次,i 的值依次为 0、1、2、3 ... 11
  5.     j = i + 1                                      # 12 次循环中,j 的值依次为 1、2、3、4 ... 12
  6.     print("%2d" % c , ': 交换前 -> ' , *li)
  7.     while j > 0 and li[j] < li[j - 1]:             # 如果当前这张牌的前面还有牌,那就和它比,如果牌点比它小就进入(或继续)循环。
  8.         li[j] , li[j - 1] = li[j - 1] , li[j]          # 交换两张牌   
  9.         j -= 1                                         # 让上一张牌成为当前牌(准备继续和上上一张牌做比较)
  10.     print("%2d" % c , ': 交换后 -> ' , *li)
  11.     print()
  12.     c +=1
复制代码

        运行实况:
  1. D:\00.Excise\Python>python pk.py
  2. 1 : 交换前 ->  M L K J I H G F E D C B A
  3. 1 : 交换后 ->  L M K J I H G F E D C B A

  4. 2 : 交换前 ->  L M K J I H G F E D C B A
  5. 2 : 交换后 ->  K L M J I H G F E D C B A

  6. 3 : 交换前 ->  K L M J I H G F E D C B A
  7. 3 : 交换后 ->  J K L M I H G F E D C B A

  8. 4 : 交换前 ->  J K L M I H G F E D C B A
  9. 4 : 交换后 ->  I J K L M H G F E D C B A

  10. 5 : 交换前 ->  I J K L M H G F E D C B A
  11. 5 : 交换后 ->  H I J K L M G F E D C B A

  12. 6 : 交换前 ->  H I J K L M G F E D C B A
  13. 6 : 交换后 ->  G H I J K L M F E D C B A

  14. 7 : 交换前 ->  G H I J K L M F E D C B A
  15. 7 : 交换后 ->  F G H I J K L M E D C B A

  16. 8 : 交换前 ->  F G H I J K L M E D C B A
  17. 8 : 交换后 ->  E F G H I J K L M D C B A

  18. 9 : 交换前 ->  E F G H I J K L M D C B A
  19. 9 : 交换后 ->  D E F G H I J K L M C B A

  20. 10 : 交换前 ->  D E F G H I J K L M C B A
  21. 10 : 交换后 ->  C D E F G H I J K L M B A

  22. 11 : 交换前 ->  C D E F G H I J K L M B A
  23. 11 : 交换后 ->  B C D E F G H I J K L M A

  24. 12 : 交换前 ->  B C D E F G H I J K L M A
  25. 12 : 交换后 ->  A B C D E F G H I J K L M

  26. D:\00.Excise\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 16:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表