luck78 发表于 2021-10-27 23:02:47

插入排序

本帖最后由 luck78 于 2021-10-27 23:11 编辑

def insert_sort(li):
    for i in range(1,len(li)): # i 表示摸到牌的下标
      tmp =li
       j = i-1 # j 表示手里的牌的下标
      while j >=0 and li > tmp:
            li = li
            j-=1# 下标往左边移动一位
      li = tmp

第4行j = i -1 这里没有看明白请问 i-1是什么?

jackz007 发表于 2021-10-27 23:08:31

本帖最后由 jackz007 于 2021-10-27 23:23 编辑

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

luck78 发表于 2021-10-27 23:43:34

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

我是在理解这个算法的运行方式

jackz007 发表于 2021-10-28 00:30:29

本帖最后由 jackz007 于 2021-10-28 00:33 编辑

luck78 发表于 2021-10-27 23:43
我是在理解这个算法的运行方式

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

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

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

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

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

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

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

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

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

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

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

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

D:\00.Excise\Python>
页: [1]
查看完整版本: 插入排序