1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| ======================================================================================= 代码编写过程: 1. 向列表元素中加入哨兵位的位置 2. 计算需要循环的次数 3. 开始循环,从原列表中第二个数字开始插入哨兵位 4. 设置待比较数字的索引值,将第二个数字放到哨兵位 5. 判断待比较数字是否大于哨兵位数字,如果不大于就结束本轮循环 6. 如果待比较数字是否大于哨兵位数字,就进入将循环,把待比较数字的索引加1或叫向后移 7. 将待比较数字的索引值减1,这是为了设置下一个待比较的数字,直到待比较数字不大于哨兵位数字 8. 将哨兵位数字插入到目前待比较数字的后面 9. 这个代码中,每次比较的都是用哨兵位上数字之前的数字和哨兵位上的数字相比 ======================================================================================= m_list = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[9,8,7,6,5,4,3,2,1],[1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,2]] nums = [0] + m_list[0] sentinel,*origin = nums count_swap = 0 count_iter = 0 length = len(nums) for i in range(2,length): nums[0] = nums[i] j = i - 1 count_iter += 1 print("count_iter",nums) if nums[j] > nums[0]:
while nums[j] > nums[0]: nums[j+1] = nums[j] j -= 1 print("count_swap",nums) count_swap += 1 nums[j+1] = nums[0]
print(nums,count_swap,count_iter) 输出: count_iter [0, 1, 9, 8, 5, 6, 7, 4, 3, 2] count_iter [9, 1, 9, 8, 5, 6, 7, 4, 3, 2] count_swap [8, 1, 9, 9, 5, 6, 7, 4, 3, 2] count_iter [8, 1, 8, 9, 5, 6, 7, 4, 3, 2] count_swap [5, 1, 8, 9, 9, 6, 7, 4, 3, 2]
count_swap [5, 1, 8, 8, 9, 6, 7, 4, 3, 2] count_iter [5, 1, 5, 8, 9, 6, 7, 4, 3, 2] count_swap [6, 1, 5, 8, 9, 9, 7, 4, 3, 2] count_swap [6, 1, 5, 8, 8, 9, 7, 4, 3, 2] count_iter [6, 1, 5, 6, 8, 9, 7, 4, 3, 2] count_swap [7, 1, 5, 6, 8, 9, 9, 4, 3, 2] count_swap [7, 1, 5, 6, 8, 8, 9, 4, 3, 2] count_iter [7, 1, 5, 6, 7, 8, 9, 4, 3, 2] count_swap [4, 1, 5, 6, 7, 8, 9, 9, 3, 2] count_swap [4, 1, 5, 6, 7, 8, 8, 9, 3, 2] count_swap [4, 1, 5, 6, 7, 7, 8, 9, 3, 2] count_swap [4, 1, 5, 6, 6, 7, 8, 9, 3, 2] count_swap [4, 1, 5, 5, 6, 7, 8, 9, 3, 2] count_iter [4, 1, 4, 5, 6, 7, 8, 9, 3, 2] count_swap [3, 1, 4, 5, 6, 7, 8, 9, 9, 2] count_swap [3, 1, 4, 5, 6, 7, 8, 8, 9, 2] count_swap [3, 1, 4, 5, 6, 7, 7, 8, 9, 2] count_swap [3, 1, 4, 5, 6, 6, 7, 8, 9, 2] count_swap [3, 1, 4, 5, 5, 6, 7, 8, 9, 2] count_swap [3, 1, 4, 4, 5, 6, 7, 8, 9, 2] count_iter [3, 1, 3, 4, 5, 6, 7, 8, 9, 2] count_swap [2, 1, 3, 4, 5, 6, 7, 8, 9, 9] count_swap [2, 1, 3, 4, 5, 6, 7, 8, 8, 9] count_swap [2, 1, 3, 4, 5, 6, 7, 7, 8, 9] count_swap [2, 1, 3, 4, 5, 6, 6, 7, 8, 9] count_swap [2, 1, 3, 4, 5, 5, 6, 7, 8, 9] count_swap [2, 1, 3, 4, 4, 5, 6, 7, 8, 9] count_swap [2, 1, 3, 3, 4, 5, 6, 7, 8, 9] [2, 1, 2, 3, 4, 5, 6, 7, 8, 9] 25 8
|