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

解释一轮排序(在考纲范围内)

排序看起来像魔术:开头是乱的,结尾是整齐的,中间的步骤却没有展示。

本页内容
  1. 一轮里发生了什么?
  2. 怎样交换两个值?
  3. 例题
  4. 要留意的错误
  5. 自我检测
  6. 接下来学什么

一轮排序就是从头到尾扫过一遍列表,比较相邻的项,并在顺序不对时交换它们。题目可能要你写出一轮之后的列表、数交换次数,或解释某一行代码的作用。

本课属于搜索、排序与文件。请查看你所考年份的 Cambridge 课程大纲,确认排序算法要求到什么程度。追踪这项技能本身可以迁移,它建立在追踪线性搜索之上。

一轮里发生了什么?

取前两项。如果左边的更大,就交换。然后向右移一格,比较下一对。继续到最后一对。

较大的值不断被带向右边,就像气泡上升。所以,一轮之后,最大的值在最后一个位置。

怎样交换两个值?

交换需要第三个位置来存放一个值,因为直接赋值会把它覆盖掉:

Temp ← Data[I]
Data[I] ← Data[I + 1]
Data[I + 1] ← Temp

下面是对五项列表做一轮的伪代码:

Swapped ← FALSE
FOR I ← 1 TO 4
   IF Data[I] > Data[I + 1] THEN
      Temp ← Data[I]
      Data[I] ← Data[I + 1]
      Data[I + 1] ← Temp
      Swapped ← TRUE
   ENDIF
NEXT I

循环只到 4,因为最后一次比较是位置 4 与位置 5。

例题

Data = [6, 2, 9, 4, 1]。追踪第一轮。

I比较的一对顺序不对?之后的列表Swapped
开始6, 2, 9, 4, 1FALSE
16 与 2是,交换2, 6, 9, 4, 1TRUE
26 与 9否2, 6, 9, 4, 1TRUE
39 与 4是,交换2, 6, 4, 9, 1TRUE
49 与 1是,交换2, 6, 4, 1, 9TRUE

一轮之后列表是 [2, 6, 4, 1, 9],共交换三次。最大的值 9 现在在位置 5,但列表还没排好,所以还需要再来一轮。

第二轮得到 [2, 4, 1, 6, 9],第三轮得到 [2, 1, 4, 6, 9],第四轮得到 [1, 2, 4, 6, 9]。第五轮没有交换,Swapped 保持 FALSE,排序停止。

要留意的错误

常见的失误是交换时不用临时变量:

Data[I] ← Data[I + 1]
Data[I + 1] ← Data[I]

设 Data = [6, 2],I = 1。第一行把 Data[1] 设为 2,得到 [2, 2]。第二行再复制 Data[1](现在是 2)到 Data[2]。结果是 [2, 2],6 丢失了。

改正方法是在覆盖之前先把第一个值存进 Temp。追踪交换时,把 Temp 的值单独写一列,丢失的值就看得见了。

自我检测

1. 在 [3, 1, 2] 上追踪一轮。之后的列表是什么?交换了几次?

Show answer

比较 3 和 1:交换,得到 1, 3, 2。比较 3 和 2:交换,得到 1, 2, 3。结果 [1, 2, 3],共 2 次交换。

2. 在 [4, 5, 6] 上做一轮后,Swapped 是 FALSE。这说明什么?

Show answer

没有任何一对顺序不对,所以列表已经排好,不需要再做一轮。

3. A = 4,B = 9。写出交换它们的三行,并给出最终的值。

Show answer

Temp ← A(Temp = 4),A ← B(A = 9),B ← Temp(B = 4)。最终:A = 9,B = 4。

接下来学什么

下一步,看存储的数据如何拆成几部分:读取记录而不弄乱字段边界。受限伪代码追踪训练器可以逐步运行一轮,让你把每个列表状态和自己的表对照。

如果你的答案里交换或标志仍然出现意外,我们的老师可以通过一对一线上计算机科学补习陪你理清。

常见问题

排序一定在我的考纲里吗?

请查看你所考年份的 Cambridge 课程大纲页面,确认需要掌握哪些算法以及如何考核。本课教的是底层技能:一次一步地跟着比较与交换走。这项技能适用于题目给出的任何排序。

冒泡排序(bubble sort)的一轮是什么?

一轮会从列表开头到末尾比较每一对相邻的值,只要左边比右边大就交换。一轮结束后,列表中最大的值会移到最后一个位置。

算法怎么知道列表已经排好?

常见方法是用一个标志。每轮开始时设为 FALSE,发生交换就设为 TRUE。如果一整轮结束后标志仍是 FALSE,说明没有任何一对顺序不对,列表就已排好。

更新于:

下一步

如果你的排序追踪在第一次交换之后就出错,一对一的老师可以把节奏放慢到一次一个比较,帮你重新养成记录每个变化的习惯。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

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

是家长或监护人?在这里咨询

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