回顾
解释有序数据为什么使二分搜索成为可能。预测仅进行一次小规模搜索时,先排序是否值得。
跟踪每一轮如何将数值移向最终位置,再实现并比较两种排序。
跟随实际的 Python 执行过程,观察列表的变化。
1def bubble_sort(items):2 for end in range(len(items) - 1, 0, -1):3 swapped = False4 for j in range(end):5 if items[j] > items[j + 1]:6 items[j], items[j + 1] = items[j + 1], items[j]7 swapped = True8 if not swapped:9 break10 return items end 之后的后缀已经排好序。提前终止标志使最佳情况的时间复杂度为 O(n);平均与最坏情况为 O(n²)。此原地实现使用 O(1) 辅助空间。
跟随实际的 Python 执行过程,观察列表的变化。
1def selection_sort(items):2 for start in range(len(items) - 1):3 smallest = start4 for j in range(start + 1, len(items)):5 if items[j] < items[smallest]:6 smallest = j7 items[start], items[smallest] = items[smallest], items[start]8 return items 找出剩余元素中的最小值,再将其交换到正确位置。start 之前的前缀已排序。即使输入已有序,比较的时间复杂度仍为 O(n²)。辅助空间为 O(1)。
解释有序数据为什么使二分搜索成为可能。预测仅进行一次小规模搜索时,先排序是否值得。
使用 [7, 2, 5, 1]。比较相邻值,必要时交换。记录每轮后的列表,并解释哪些元素已处于最终位置。
使用相同的初始列表。找出剩余最小值,将其交换到下一个位置。分别记录比较与交换。
不使用 sorted() 或 list.sort() 实现一种排序。测试 []、[4]、已排序列表、逆序列表及重复值。
用跟踪记录作为证据,解释两种算法的一个区别。
每轮都重复什么工作?随着列表变大,这些工作如何变化?
假期期间完成 B2.4 算法学生讲义第 3–7 题中尚未完成的内容。第 1、2 题已经完成。
完成 B2.4 算法学生讲义印刷页码第11页的第9(a)题,以及第12页第10题中仅涉及冒泡排序的部分。截止日期为2026年10月7日。