跳到正文
IGCSE·Tuition
计算机科学 · 课程

在给定列表中找最大值

用眼睛找最大的数很容易,但要把步骤写成算法时却很容易出错。

本页内容
  1. 步骤是什么?
  2. 例题详解
  3. 要留意的错误
  4. 自我检测
  5. 接下来学什么

要找列表的最大值(maximum),用一个变量保存目前见过的最大值,并把其他每个项目与它比较。每当某个项目更大,就用它取代保存的值。

这一课把追踪计数控制循环中的循环用在数组上。它属于重复与数组模块,同样的模式还能用来求最小值、计数和求和。

步骤是什么?

  1. 把 Max 设为列表中的第一个项目。
  2. 循环处理其余项目,从位置 2 到最后一个位置。
  3. 如果当前项目大于 Max,就把它复制进 Max。
  4. 循环结束后,Max 保存的就是最大值。

例题详解

数组 Scores[1:6] 存有 35, 48, 22, 48, 51, 40。

Max ← Scores[1]
FOR i ← 2 TO 6
   IF Scores[i] > Max
      THEN
         Max ← Scores[i]
   ENDIF
NEXT i
OUTPUT Max

Max 一开始是 35。

iScores[i]Scores[i] > Max?之后的 Max
24848 > 35 真48
32222 > 48 假48
44848 > 48 假48
55151 > 48 真51
64040 > 51 假51

输出是 51。位置 4 存有相等的值 48,因为 48 > 48 为假,所以不会取代 Max。

如果还要报告最大值在哪里,就把位置也存起来:

Max ← Scores[1]
MaxPos ← 1
FOR i ← 2 TO 6
   IF Scores[i] > Max
      THEN
         Max ← Scores[i]
         MaxPos ← i
   ENDIF
NEXT i
OUTPUT MaxPos, Max

对同样的数据,MaxPos 在 i = 2 和 i = 5 时改变。输出是 5, 51。

要留意的错误

常见的失误是以 Max ← 0 开始。

错误的算法: Max ← 0,然后把包括第一个在内的每个项目都拿来比较。

对温度 -5、-2 和 -9,没有一个值大于 0,所以算法输出 0。这个值根本不在列表中。

纠正的方法是 Max ← Temps[1],然后从位置 2 开始循环。追踪:Max 是 -5,然后 -2 > -5 为真,Max 变成 -2,接着 -9 > -2 为假。输出是 -2,正确。

自我检测

1. 用数据 8, 3, 12, 12, 5 追踪这个算法。每个项目之后 Max 是多少?

显示答案

从 8 开始。然后 3 > 8 假(8),12 > 8 真(12),12 > 12 假(12),5 > 12 假(12)。最终值是 12。

2. 要对同样的数据求最小值,哪一个符号要改?结果是什么?

显示答案

把 > 改成 <。从 8 开始,然后 3 < 8 真(3),之后 12、12 和 5 都不小于 3。最小值是 3。

3. 数据 6, 9, 9, 2 存在 Data[1:4] 中。记录位置的版本会给出什么位置?改用 >= 会怎样?

显示答案

用 > 时,位置 2 的 9 先被保存,第二个 9 不会取代它,所以位置是 2。用 >= 时,第二个 9 取代了它,所以位置是 3。两种情况下值都是 9。

接下来学什么

接下来仔细看循环变量 i 与它所指向的项目有什么不同:使用数组下标,不把它与值混淆。想试试自己的列表,可以用 Python 推理沙盒,并把结果与你的追踪表比较。

一对一线上计算机科学补习的老师可以给你一些特殊的列表,例如含负数或重复值,让你学会预测算法会在哪里失败。

常见问题

为什么 Max 要从第一个项目开始,而不是 0?

从 0 开始只在所有值都大于 0 时才行得通。如果所有值都是负数,0 永远不会被超过,算法就会输出一个不在列表中的值。从第一个项目开始,总能拿一个列表中真实存在的值来比较。

如果要找最小值,要改什么?

把比较符号从 > 改成 <,并把变量命名为 Min。其余都一样:从第一个项目开始,把剩下的每个项目与它比较。

最大值出现两次时会怎样?

用 > 时,第一个最大值会保留,因为相等的值不会取代它。用 >= 时,最后一个会胜出。最大值本身不变,但保存的位置会不同。

更新于:

下一步

如果你用眼睛能找出最大值,但算法遇到特殊数据就出错,老师可以和你一起用新的列表测试,直到你能预测它会在哪里失败。

一小时付费试听课,按所安排老师确认的收费,RM80 起。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

家长:在这里咨询

  • 已通过我们的服务帮助 9,000+ 名学生
  • 9+ 年帮助 IGCSE 学生