查找与排序算法
標準约 28 分钟5 个术语过去问 4 题
本单元目标
- 能从数据须满足的排列前提和比较次数的增长方式,区分线性查找法与二分查找法。
- 能用少量数据,逐步跟踪选择排序和冒泡排序在排序过程中数据排列的变化。
- 能说明快速排序如何用基准值把数据分组,并反复执行同一步骤完成排序。
术语总表(5 个)
术语
线性查找法(線形探索法)是从数据开头起依次 逐个 与目标值比较,一旦相同就结束的查找方法。
数据即使没有排序,也可以直接使用。比较次数取决于目标值所在的位置,若它在末尾或根本不存在,就要与全部数据逐一比较。平均下来,大约需要比较数据个数一半的次数。
类比就像在书脊排列杂乱的书架上找一本书,只能从最左边开始一本一本地看。
记法“线性”就是一条线:像沿着线描一样,从一端朝一个方向推进。
考点
- 常考线性查找法(線形探索法)的比较次数与数据个数成正比增长。数据个数翻倍,最坏情况下的比较次数也翻倍。
该术语的过去问 1 题 線形探索法 →
二分查找法(2分探索法)用于按从小到大(升序)或从大到小(降序)排好序的数据,每次与查找范围 中间 的值比较,把范围缩小为目标值所在的那一半。
以升序为例,目标值比中间值小就只保留前半部分,比中间值大就只保留后半部分,如此反复,直到找到或范围为空。每比较一次,候选就减少约一半,所以数据个数翻倍,比较次数也只增加 1 次左右。不过比较次数也会随目标值的位置而变,若目标值靠近开头,线性查找法有时反而用更少的次数就能找到。
类比就像在一沓按号码顺序叠好的挂号单里抽出中间那张,判断要找的号码在前还是在后,再到剩下的一半里看中间那张。
记法“二分”就是一分为二。英文 binary search 中的 binary 也是“二”的意思。
考点
- 常考二分查找法(2分探索法)反复与剩余范围中间的元素比较,每比较一次就把候选减少约一半。
- 易混以数据已按升序(昇順)或降序(降順)排好为前提的是二分查找法(2分探索法),而线性查找法(線形探索法)不论数据如何排列都能使用。
该术语的过去问 1 题 2分探索法 →
选择排序(選択ソート)是反复从尚未排好的范围中选出 最小值(或最大值),并与该范围一端的值交换的排序方法。
排序是把数据按值的大小顺序重新排列的处理。把未排序范围检查一遍、确定一端 1 个位置的值,这一轮称为 1 趟,每过 1 趟范围就缩小 1 个。比较次数大约与数据个数的平方成正比,因此数据多时很费时间。
类比就像整理手里的扑克牌:从还没理好的牌里找出最小的一张,放到已理好那几张的右边,如此反复。
记法英文 selection 意为“挑选”:就像选拔代表,先把所有人比一遍,再选出 1 个。
考点
- 常考选择排序(選択ソート)每 1 趟确定一端的 1 个位置,最后剩下的 1 个不用比较位置就已确定。趟数在把剩下的 1 个也算作 1 趟的步骤中等于数据个数,不算的步骤中则等于数据个数 − 1。
- 常考在把最小值移到前面的选择排序中,完成第 k 次选择与交换时,开头的 k 个值已按从小到大的顺序确定。
该术语的过去问 2 题 選択ソート →
冒泡排序(バブルソート)是比较 相邻的两个 值、顺序相反就交换,并从一端到另一端反复进行的排序方法。
按升序排列时,每走完 1 趟,最大的值就被送到末尾并确定下来。下一趟在除去已确定末尾的范围内做同样的操作,如果某 1 趟中一次交换也没发生,排序就已完成。比较次数与选择排序相同,大约与数据个数的平方成正比。
类比就像排成一列的人只和身旁的人比身高,个子高的往右挪一位,一直比到队尾。
记法bubble 是“气泡”:大的值像气泡一样,一个个浮到末端。
考点
- 常考升序的冒泡排序(バブルソート)在相邻两个值中左边较大时交换。每 1 趟确定末尾的值,所以下一趟要比较的范围缩短 1 个。
- 易混选择排序(選択ソート)在 1 趟中找完最小值后最多交换 1 次,而冒泡排序(バブルソート)每比较一次,遇到顺序相反的相邻值就当场交换。
该术语的过去问 1 题 バブルソート →
快速排序(クイックソート)是先选定 1 个 基准值(pivot),把数据分成比它小的组和比它大的组,再对各组重复同样步骤的排序方法。
组内元素只剩 1 个或没有时就不必再分,把各组按顺序排起来,整体就排好了。像这样把同一步骤套用到更小部分上的做法称为递归。平均比较次数比“平方型”方法少,但基准值选得不好时,会接近数据个数的平方。
类比就像把一堆文件按某个基准日期分成之前和之后两堆,再把每一堆照同样方法继续分下去。
记法quick 在英文中是“快”的意思。
要点
- 查找(探索)是在数据中找出目标值所在位置的处理,排序(整列)是按值的大小顺序重新排列的处理。
- 选择排序和冒泡排序都是每 1 趟从一端确定 1 个值的位置,比较次数大约与数据个数的平方成正比。
- 快速排序按基准值把数据分成较小组和较大组,并对各组重复同样的步骤。平均来看,它的比较次数比“平方型”方法少。
查看这个领域的全部过去问 →