大爽Python入门练习题 310 猜函数

大爽Python入门练习题总目录

第二章 中期练习题 困难 第10题

题目

简介

尽量手动模拟分析(实在不行也可以用电脑运行)

  1. 猜一下下面输出的结果
  2. 猜下以下两个函数的作用(意义)
  3. 尝试分别理解每行代码,尝试分别理解两个函数代码整体的思路。

函数一

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)

分割线

本小段没有实际意义,
仅用于分隔题目和答案。
防止学生无意中直接看到答案,
影响思路。



















答案

  1. 运行结果都是
[2, 4, 5, 6, 7, 9]
  1. 两个函数的作用都是
    arr数组排序(升序)

  2. 代码的思想
    函数一其实就是选择排序(Selection Sort)
    核心思想是每次都选出最小值,放在一端,重复此操作n次。

函数二其实就是插入排序(Insertion Sort)
核心思想是从前往后遍历,每次将当前值拿出来,往前,插入到匹配位置。

原文地址:https://www.cnblogs.com/BigShuang/p/15690326.html