第二章 中期练习题 困难 第10题
题目
简介
尽量手动模拟分析(实在不行也可以用电脑运行)
- 猜一下下面输出的结果
- 猜下以下两个函数的作用(意义)
- 尝试分别理解每行代码,尝试分别理解两个函数代码整体的思路。
函数一
def mystery1(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1, len(arr)):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
lst = [7, 4, 6, 9, 5, 2]
mystery1(lst)
print(lst)
函数二
def mystery2(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >= 0 and key < arr[j] :
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
lst = [7, 4, 6, 9, 5, 2]
mystery2(lst)
print(lst)
分割线
本小段没有实际意义,
仅用于分隔题目和答案。
防止学生无意中直接看到答案,
影响思路。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
答案
- 运行结果都是
[2, 4, 5, 6, 7, 9]
-
两个函数的作用都是
将arr
数组排序(升序) -
代码的思想
函数一其实就是选择排序(Selection Sort)
核心思想是每次都选出最小值,放在一端,重复此操作n次。
函数二其实就是插入排序(Insertion Sort)
核心思想是从前往后遍历,每次将当前值拿出来,往前,插入到匹配位置。