第10讲 数据排序与查找(复习讲义)(浙江专用)2027年高考信息技术一轮复习讲练测
|
2份
|
21页
|
54人阅读
|
1人下载
精品
内容正文:
第10讲 数据排序与查找
内容导航
01
命题透视·考情前瞻
对标考纲,精准标注重点难点
02
思维建模·脉络梳理
搭建知识框架,构建系统思维
03
考点精讲·靶向突破
拆解核心考点,归纳解题范式
考点一 数据排序
知识解构 知识点1冒泡排序与选择排序(基本思想、代码实现、交换次数比较)
知识点2 插入排序(基本思想、代码实现、数据移动次数)
知识点3 排序算法的变式与综合应用(多重条件排序、区间/奇偶位排序)
考向破译 考向1排序过程模拟与特征判断(选择题)
考向2 排序综合应用(非选择题)
考点二 数据查找
知识解构 知识点1顺序查找(代码实现、最多/最少查找次数)
知识点2 二分查找(算法思想、代码实现)
知识点3 二分查找的边界条件与变式应用(第一个大于等于某值、查找不成功)
考向破译 考向1二分查找过程模拟与边界追踪(选择题)
考向2 二分查找边界变式与应用(选择题)
04
真题溯源·考向感知
溯源真题逻辑,感知高考考向
课标达标练
——对标考纲,精准标注重点难点
考点要求
考查形式
2026年
2025年
2024年
数据排序(冒泡排序与选择排序、插入排序、排序算法的变式与综合应用)★重点
选择题
非选择题
浙江卷1月
T7、T12
——
——
数据查找(顺序查找、二分查找、二分查找的边界条件与变式应用)★重点
选择题
非选择题
——
——
浙江卷1月
T10
考情分析:
1.数据排序与数据查找是浙江信息技术选考算法模块的高频考点,选择题与非选择题均有涉及。选择题常以“排序过程模拟(交换次数、变量追踪)”“二分查找过程与边界追踪”等形式考查;非选择题(第15题)常结合真实情境,综合考查“先排序、再查找”的算法设计与程序实现。
2.冒泡排序相邻两两比较、逆序交换,每一趟确定一个最值位置,交换总次数等于逆序对数量(如2020年1月选考第9题)。
3.选择排序记录极值下标、一趟一交换,交换次数明显少于冒泡;插入排序在数据基本有序时效率最高。
4.二分查找以有序数据为前提,掌握 while low≤high、mid=(low+high)//2、low=mid+1、high=mid-1 的边界更新(如2024年1月选考第10题)。
5.变式与综合:多重条件排序(成绩降序、姓名升序)、区间/奇偶位排序、按索引排序;二分查找求 key 第一次出现位置与出现次数、查找第一个大于等于某值的元素(如2026年1月选考第12题分区排序)。
复习目标:
1.掌握冒泡、选择、插入三种排序的基本思想、代码实现及交换/移动次数比较,能在纸上默写标准代码。
2.掌握顺序查找与二分查找的代码实现,理解二分查找的边界条件(low/high 更新、防死循环)。
3.能根据真实情境将问题抽象为“排序+查找”模型,掌握多重条件排序、区间/奇偶位排序等变式。
4.能独立推演排序与查找过程,完成过程追踪选择题与程序填空。
思维建模·脉络梳理
——搭建知识框架,构建系统思维
考点精讲·靶向突破
——拆解核心考点,归纳解题范式
考点一 数据排序
知●识●解●构
知识点1 冒泡排序与选择排序(★重点)
1.冒泡排序:相邻元素两两比较,若逆序则交换;每一趟将最大(升序)元素交换到未排序区末尾;n 个元素最多需 n-1 趟,每趟比较次数逐趟减少;冒泡排序是稳定排序。
2.交换次数:冒泡排序过程中的交换总次数等于该序列的逆序对数量。
3.选择排序:每趟从未排序区中选出最小值所在下标,一趟结束仅交换一次;n 个元素需 n-1 趟;选择排序是不稳定排序。
4.交换次数比较:冒泡每趟可能多次交换,选择排序每趟至多交换 1 次,故选择排序交换次数≤n-1,远少于冒泡。
5.标准代码(升序):
# 冒泡排序(升序)
for i in range(n-1):
for j in range(n-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
# 选择排序(升序)
for i in range(n-1):
k = i
for j in range(i+1, n):
if a[j] < a[k]:
k = j
a[i], a[k] = a[k], a[i]
知识点2 插入排序(★重点)
1.基本思想:从第 2 个元素起,把待排序元素插入到其左侧已有序序列的合适位置。
2.代码实现:
for i in range(1, n):
t = a[i]; j = i-1
while j >= 0 and a[j] > t:
a[j+1] = a[j]; j -= 1
a[j+1] = t
3.数据移动次数:插入排序移动次数较多;当数据基本有序时,插入排序效率最高,比较与移动次数接近 n-1。
4.稳定性:插入排序是稳定排序。
知识点3 排序算法的变式与综合应用(★难点)
1.多重条件排序:如“按成绩降序、姓名升序”,交换条件需组合判断,如 if score[j]<score[j+1] or (score[j]==score[j+1] and name[j]>name[j+1])。
2.区间排序:只对数组的某一区间、或奇数位/偶数位进行排序。
3.索引排序:按元素值大小排列其下标(不改变原数组,仅重排索引)。
4.快速排序分区思想:一趟将小于基准值的元素移到左侧,大于的移到右侧(如 2026年1月第12题)。
考●向●破●译
考向1 排序过程模拟与代码(选择题)
例1 (2026届浙江精诚联盟高三二模 第11题)
根据列表中元素大小关系,升序排列各元素的索引,并将排序后的索引保存在列表 y 中。如列表 s=[1,5,6,8,1,2],程序运行后得到列表 y=[0,4,5,1,2,3]。则划线处的代码应该是( )
def sort_in(x):
n = len(x)
y = [i for i in range(n)]
for i in range(①_____):
for j in range(②_____):
if ③____:
y[j], y[j+1] = y[j+1], y[j]
return y
x = [1,5,6,8,1,2]
y = sort_in(x)
print(“各元素升序排列的序号:”, y)
A. ①n ②n-i ③y[j]>=y[j+1] B. ①n ②n-i ③x[y[j]]>=x[y[j+1]]
C. ①n-1 ②n-i-1 ③y[j]>=y[j+1] D. ①n-1 ②n-i-1 ③x[y[j]]>=x[y[j+1]]
考向2 排序综合应用(非选择题)
例1 (2026届浙江精诚联盟高三二模 第13题)
某地电动汽车充电网络,根据各充电站实时负荷率和车辆距离,按照以下规则推荐合适的充电站:若存在充电站负荷率不高于 70% 的充电站(负荷率采用百分制,如 95% 记为 95),则选择其中距离车辆最近的;若所有充电站负荷率均高于 70%,则选择负荷率最低的;若有多个充电站满足条件,则选择编号最小的。
(1)若某时刻编号为 0~3 的各充电站负荷率为 90,65,75,50,与当前车辆距离为 2,5,5,15(单位:千米),那么将会推荐的充电站编号为____。
(2)实现上述功能的 Python 程序如下,请在划线处填入合适的代码。(考查按条件遍历、记录最值下标与比较的逻辑,代码略)
考点二 数据查找
知●识●解●构
知识点1 顺序查找(★重点)
1.基本思想:从第一个元素起,依次与待查找值 key 比较,直到找到或遍历完整个序列。
2.适用范围:无序数据;最多比较 n 次、最少比较 1 次;查找失败需比较 n 次。
3.代码实现:i=0;while i<n and a[i]!=key:i+=1;循环结束后若 i<n 则找到(位置 i),否则未找到。
知识点2 二分查找(★重点)
1.前提:数据必须有序(升序或降序)。
2.思想:每次与中间元素 a[mid] 比较,据此将查找区间缩小一半;循环条件 while low≤high。
3.代码实现:
low, high = 0, n-1
while low <= high:
mid = (low + high) // 2
if a[mid] == key:
print(“找到,位置”, mid); break
elif a[mid] < key:
low = mid + 1
else:
high = mid - 1
4.比较次数:约为 log₂(n)(以 2 为底的对数)。
5.边界注意:mid=(low+high)//2 向下取整;low=mid+1、high=mid-1,避免死循环。
知识点3 二分查找的边界条件与变式应用(★难点)
1.查找第一个大于等于某值的元素:当 a[mid]≥key 时 high=mid-1,最终 low 即为第一个大于等于 key 的位置。
2.查找 key 第一次出现的位置:相等时继续向左查找(high=mid-1)。
3.求 key 出现次数:用 search(key+1)-search(key)(如杭州市质检第10题)。
4.查找不成功的情况:循环结束后 low 可能越界(low=n),表示未找到。
考●向●破●译
考向1 二分查找过程模拟与边界追踪(选择题)
例1 (2022年6月浙江省普通高校招生选考科目考试 信息技术 第10题)
某二分查找算法的 Python 程序段如下:
i, j = 0, len(d) - 1
while i <= j:
m = (i + j) // 2 # 语句①
if key == d[m]:
break
elif key < d[m]:
j = m - 1
else:
i = m + 1
当 d 为 [6,12,15,18,22,25,28,35,46] 时,运行该程序段查找 key,语句①的执行次数小于等于2;若将 d 修改为 [6,12,15,18,22,25,28,35,46,58],重新运行该程序段,查找同一 key 值,则语句①的执行次数不可能为( )
A. 1 B. 2 C. 3 D. 4
考向2 二分查找边界变式与应用(选择题)
例1 (2024学年第二学期杭州市高三年级教学质量检测 第10题)
已知非降序列表 a 由若干个整型元素构成,现要查找并输出 a 中整数 key 出现的次数。实现该功能的程序段如下:
def search(a, key):
L, R = 0, len(a)-1
while L <= R:
m = (L + R) // 2
if 加框处:
R = m - 1
else:
L = m + 1
return L
# 列表 a 和 key 初始化,代码略
print(search(a, key+1) - search(a, key))
加框处应填入的正确代码为( )
A. a[m] >= key B. a[m] > key C. a[m] < key D. a[m] <= key
真题溯源·考向感知
——溯源真题逻辑,感知高考考向
1.(选考真题・2020年1月浙江信息技术选考 第9题)
采用冒泡排序算法对数据序列"2,3,4,5,1,0"完成升序排序,则需要交换的次数为( )
A. 9次 B. 12次 C. 15次 D. 18次
2.(选考真题・2026年1月浙江信息技术选考 第7题)
某算法的部分流程图如图所示,若 n 的值为 8,数组元素 a[0] 至 a[n-1] 依次存放 2,3,4,8,5,4,9,6,执行这部分流程后,输出 c 的值为( )
A. 1 B. 2 C. 3 D. 4
3.(选考真题・2026年1月浙江信息技术选考 第12题)
有如下 Python 程序段:
#获取a的初始值,代码略
i=1
for j in range(1,len(a)):
if a[j]<a[0]:
a[i],a[j]=a[j],a[i]
i+=1
a[0],a[i-1]=a[i-1],a[0]
执行该程序段后,a 的值为 [2,4,3,5,6,9,7],则下列选项中不可能为 a[0] 的初始值的是( )
A. 2 B. 5 C. 6 D. 7
4.(选考真题・2024年1月浙江信息技术选考 第10题)
某算法的部分流程图如图所示,若 n 的值为 7,数组元素 a[0] 至 a[n-1] 依次存放 7,12,24,36,55,78,83,key 的值为 78,执行这部分流程后,输出 c 的值为( )
A.1 B. 2 C. 3 D. 4
备考要点总结
——考前回望,抓住得分点
1.冒泡排序:相邻两两比较、逆序交换,每一趟确定一个最值位置;交换次数等于逆序对数量。
2.选择排序:记录极值下标、一趟一交换,交换次数≤n-1;不稳定。
3.插入排序:把待排序元素插入已有序序列;数据基本有序时效率最高;注意数据移动次数。
4.二分查找前提是有序数据;while low≤high、mid=(low+high)//2、low=mid+1、high=mid-1,防死循环。
5.二分查找边界变式:求 key 第一次/最后一次出现位置、出现次数、第一个大于等于 key 的元素;查找不成功时 low 越界。
6.排序与查找综合:多重条件排序(成绩降序、姓名升序)、区间/奇偶位排序、按索引排序,以及“先排序、再查找”的综合题。
7.过程模拟题务必手动画图推演每一趟结果,切勿凭直觉。
2 / 3
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
第10讲 数据排序与查找
内容导航
01
命题透视·考情前瞻
对标考纲,精准标注重点难点
02
思维建模·脉络梳理
搭建知识框架,构建系统思维
03
考点精讲·靶向突破
拆解核心考点,归纳解题范式
考点一 数据排序
知识解构 知识点1冒泡排序与选择排序(基本思想、代码实现、交换次数比较)
知识点2 插入排序(基本思想、代码实现、数据移动次数)
知识点3 排序算法的变式与综合应用(多重条件排序、区间/奇偶位排序)
考向破译 考向1排序过程模拟与特征判断(选择题)
考向2 排序综合应用(非选择题)
考点二 数据查找
知识解构 知识点1顺序查找(代码实现、最多/最少查找次数)
知识点2 二分查找(算法思想、代码实现)
知识点3 二分查找的边界条件与变式应用(第一个大于等于某值、查找不成功)
考向破译 考向1二分查找过程模拟与边界追踪(选择题)
考向2 二分查找边界变式与应用(选择题)
04
真题溯源·考向感知
溯源真题逻辑,感知高考考向
课标达标练
——对标考纲,精准标注重点难点
考点要求
考查形式
2026年
2025年
2024年
数据排序(冒泡排序与选择排序、插入排序、排序算法的变式与综合应用)★重点
选择题
非选择题
浙江卷1月
T7、T12
——
——
数据查找(顺序查找、二分查找、二分查找的边界条件与变式应用)★重点
选择题
非选择题
——
——
浙江卷1月
T10
考情分析:
1.数据排序与数据查找是浙江信息技术选考算法模块的高频考点,选择题与非选择题均有涉及。选择题常以“排序过程模拟(交换次数、变量追踪)”“二分查找过程与边界追踪”等形式考查;非选择题(第15题)常结合真实情境,综合考查“先排序、再查找”的算法设计与程序实现。
2.冒泡排序相邻两两比较、逆序交换,每一趟确定一个最值位置,交换总次数等于逆序对数量(如2020年1月选考第9题)。
3.选择排序记录极值下标、一趟一交换,交换次数明显少于冒泡;插入排序在数据基本有序时效率最高。
4.二分查找以有序数据为前提,掌握 while low≤high、mid=(low+high)//2、low=mid+1、high=mid-1 的边界更新(如2024年1月选考第10题)。
5.变式与综合:多重条件排序(成绩降序、姓名升序)、区间/奇偶位排序、按索引排序;二分查找求 key 第一次出现位置与出现次数、查找第一个大于等于某值的元素(如2026年1月选考第12题分区排序)。
复习目标:
1.掌握冒泡、选择、插入三种排序的基本思想、代码实现及交换/移动次数比较,能在纸上默写标准代码。
2.掌握顺序查找与二分查找的代码实现,理解二分查找的边界条件(low/high 更新、防死循环)。
3.能根据真实情境将问题抽象为“排序+查找”模型,掌握多重条件排序、区间/奇偶位排序等变式。
4.能独立推演排序与查找过程,完成过程追踪选择题与程序填空。
思维建模·脉络梳理
——搭建知识框架,构建系统思维
考点精讲·靶向突破
——拆解核心考点,归纳解题范式
考点一 数据排序
知●识●解●构
知识点1 冒泡排序与选择排序(★重点)
1.冒泡排序:相邻元素两两比较,若逆序则交换;每一趟将最大(升序)元素交换到未排序区末尾;n 个元素最多需 n-1 趟,每趟比较次数逐趟减少;冒泡排序是稳定排序。
2.交换次数:冒泡排序过程中的交换总次数等于该序列的逆序对数量。
3.选择排序:每趟从未排序区中选出最小值所在下标,一趟结束仅交换一次;n 个元素需 n-1 趟;选择排序是不稳定排序。
4.交换次数比较:冒泡每趟可能多次交换,选择排序每趟至多交换 1 次,故选择排序交换次数≤n-1,远少于冒泡。
5.标准代码(升序):
# 冒泡排序(升序)
for i in range(n-1):
for j in range(n-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
# 选择排序(升序)
for i in range(n-1):
k = i
for j in range(i+1, n):
if a[j] < a[k]:
k = j
a[i], a[k] = a[k], a[i]
知识点2 插入排序(★重点)
1.基本思想:从第 2 个元素起,把待排序元素插入到其左侧已有序序列的合适位置。
2.代码实现:
for i in range(1, n):
t = a[i]; j = i-1
while j >= 0 and a[j] > t:
a[j+1] = a[j]; j -= 1
a[j+1] = t
3.数据移动次数:插入排序移动次数较多;当数据基本有序时,插入排序效率最高,比较与移动次数接近 n-1。
4.稳定性:插入排序是稳定排序。
知识点3 排序算法的变式与综合应用(★难点)
1.多重条件排序:如“按成绩降序、姓名升序”,交换条件需组合判断,如 if score[j]<score[j+1] or (score[j]==score[j+1] and name[j]>name[j+1])。
2.区间排序:只对数组的某一区间、或奇数位/偶数位进行排序。
3.索引排序:按元素值大小排列其下标(不改变原数组,仅重排索引)。
4.快速排序分区思想:一趟将小于基准值的元素移到左侧,大于的移到右侧(如 2026年1月第12题)。
考●向●破●译
考向1 排序过程模拟与代码(选择题)
例1 (2026届浙江精诚联盟高三二模 第11题)
根据列表中元素大小关系,升序排列各元素的索引,并将排序后的索引保存在列表 y 中。如列表 s=[1,5,6,8,1,2],程序运行后得到列表 y=[0,4,5,1,2,3]。则划线处的代码应该是( )
def sort_in(x):
n = len(x)
y = [i for i in range(n)]
for i in range(①_____):
for j in range(②_____):
if ③____:
y[j], y[j+1] = y[j+1], y[j]
return y
x = [1,5,6,8,1,2]
y = sort_in(x)
print(“各元素升序排列的序号:”, y)
A. ①n ②n-i ③y[j]>=y[j+1] B. ①n ②n-i ③x[y[j]]>=x[y[j+1]]
C. ①n-1 ②n-i-1 ③y[j]>=y[j+1] D. ①n-1 ②n-i-1 ③x[y[j]]>=x[y[j+1]]
答案:D
解析:本题考查冒泡排序框架的应用。n 个元素进行冒泡排序,外层循环需执行 n-1 轮,故①处应为 n-1;每一轮后未排序部分的最大元素已到位,内层只需遍历未排序部分,②处应为 n-i-1;本处是按原列表 x 的元素大小对索引 y 排序,因此③处应比较 x[y[j]] 与 x[y[j+1]],故选 D。
考向2 排序综合应用(非选择题)
例1 (2026届浙江精诚联盟高三二模 第13题)
某地电动汽车充电网络,根据各充电站实时负荷率和车辆距离,按照以下规则推荐合适的充电站:若存在充电站负荷率不高于 70% 的充电站(负荷率采用百分制,如 95% 记为 95),则选择其中距离车辆最近的;若所有充电站负荷率均高于 70%,则选择负荷率最低的;若有多个充电站满足条件,则选择编号最小的。
(1)若某时刻编号为 0~3 的各充电站负荷率为 90,65,75,50,与当前车辆距离为 2,5,5,15(单位:千米),那么将会推荐的充电站编号为____。
(2)实现上述功能的 Python 程序如下,请在划线处填入合适的代码。(考查按条件遍历、记录最值下标与比较的逻辑,代码略)
答案:(1)1
解析:(1)编号 0~3 的负荷率为 90、65、75、50。存在负荷率不高于 70% 的充电站(65、50),故从中选择距离车辆最近者:65% 对应距离 5,50% 对应距离 15,最近距离为 5,对应编号 1,因此推荐 1 号充电站。
考点二 数据查找
知●识●解●构
知识点1 顺序查找(★重点)
1.基本思想:从第一个元素起,依次与待查找值 key 比较,直到找到或遍历完整个序列。
2.适用范围:无序数据;最多比较 n 次、最少比较 1 次;查找失败需比较 n 次。
3.代码实现:i=0;while i<n and a[i]!=key:i+=1;循环结束后若 i<n 则找到(位置 i),否则未找到。
知识点2 二分查找(★重点)
1.前提:数据必须有序(升序或降序)。
2.思想:每次与中间元素 a[mid] 比较,据此将查找区间缩小一半;循环条件 while low≤high。
3.代码实现:
low, high = 0, n-1
while low <= high:
mid = (low + high) // 2
if a[mid] == key:
print(“找到,位置”, mid); break
elif a[mid] < key:
low = mid + 1
else:
high = mid - 1
4.比较次数:约为 log₂(n)(以 2 为底的对数)。
5.边界注意:mid=(low+high)//2 向下取整;low=mid+1、high=mid-1,避免死循环。
知识点3 二分查找的边界条件与变式应用(★难点)
1.查找第一个大于等于某值的元素:当 a[mid]≥key 时 high=mid-1,最终 low 即为第一个大于等于 key 的位置。
2.查找 key 第一次出现的位置:相等时继续向左查找(high=mid-1)。
3.求 key 出现次数:用 search(key+1)-search(key)(如杭州市质检第10题)。
4.查找不成功的情况:循环结束后 low 可能越界(low=n),表示未找到。
考●向●破●译
考向1 二分查找过程模拟与边界追踪(选择题)
例1 (2022年6月浙江省普通高校招生选考科目考试 信息技术 第10题)
某二分查找算法的 Python 程序段如下:
i, j = 0, len(d) - 1
while i <= j:
m = (i + j) // 2 # 语句①
if key == d[m]:
break
elif key < d[m]:
j = m - 1
else:
i = m + 1
当 d 为 [6,12,15,18,22,25,28,35,46] 时,运行该程序段查找 key,语句①的执行次数小于等于2;若将 d 修改为 [6,12,15,18,22,25,28,35,46,58],重新运行该程序段,查找同一 key 值,则语句①的执行次数不可能为( )
A. 1 B. 2 C. 3 D. 4
参考答案:D
解析:
题目关键条件是“在9个元素的数组中查找同一key,语句①执行次数≤2”。语句①每执行一次,代表进行了一次二分比较,查找区间减半。
9个元素时,最多比较4次(因为 2^3 < 9 \leq 2^423<9≤24)。题目说执行次数≤2,意味着该 key 要么第1次就命中 d[4](22),要么第2次命中 d[1](12)或 d[7](35),即 key 只可能是 12、22、35 之一(或查找失败时恰好2次结束的边界值)。
现在数组变为10个元素 [6,12,15,18,22,25,28,35,46,58],二分中点序列会发生变化:
若 key = 12:第1次 m=4(22),key<22 → j=3;第2次 m=1(12),命中。执行 2次。
若 key = 22:第1次 m=4(22),命中。执行 1次。
若 key = 35:第1次 m=4(22),key>22 → i=5;第2次 m=7(35),命中。执行 2次。
无论 key 是上述哪个值,在10元素数组中语句①的执行次数最多为 2次,不可能达到4次。故选 D。
考向2 二分查找边界变式与应用(选择题)
例1 (2024学年第二学期杭州市高三年级教学质量检测 第10题)
已知非降序列表 a 由若干个整型元素构成,现要查找并输出 a 中整数 key 出现的次数。实现该功能的程序段如下:
def search(a, key):
L, R = 0, len(a)-1
while L <= R:
m = (L + R) // 2
if 加框处:
R = m - 1
else:
L = m + 1
return L
# 列表 a 和 key 初始化,代码略
print(search(a, key+1) - search(a, key))
加框处应填入的正确代码为( )
A. a[m] >= key B. a[m] > key C. a[m] < key D. a[m] <= key
答案:A
解析:本题考查二分查找边界条件的变式。由最后一行可知,通过 search 分别求 key+1 第一次出现的位置和 key 第一次出现的位置,二者相减即为 key 出现次数。因此 search 函数用于求 key 第一次出现的位置,当数值相等时应继续向左半段查找,即当 a[m]>=key 时 R=m-1,故选 A。
真题溯源·考向感知
——溯源真题逻辑,感知高考考向
1.(选考真题・2020年1月浙江信息技术选考 第9题)
采用冒泡排序算法对数据序列"2,3,4,5,1,0"完成升序排序,则需要交换的次数为( )
A. 9次 B. 12次 C. 15次 D. 18次
【参考答案与解析】
答案:A
解析:本题考查冒泡排序交换次数。冒泡排序交换总次数等于序列的逆序对数量。序列 2,3,4,5,1,0 中的逆序对为 (2,1)、(2,0)、(3,1)、(3,0)、(4,1)、(4,0)、(5,1)、(5,0)、(1,0),共 9 个,故需要交换 9 次。
2.(选考真题・2026年1月浙江信息技术选考 第7题)
某算法的部分流程图如图所示,若 n 的值为 8,数组元素 a[0] 至 a[n-1] 依次存放 2,3,4,8,5,4,9,6,执行这部分流程后,输出 c 的值为( )
A. 1 B. 2 C. 3 D. 4
【参考答案与解析】
答案:D
解析:本题考查排序算法(由后往前冒泡)的执行推演与变量追踪。流程以数组最后一个位置(i←n-1)为起始,由后往前比较相邻元素 a[i] 与 a[i-1],a[i]<a[i-1] 时交换,并用变量 c 保存当前 i 值。逐步推演:i=7,a[7]=6<a[6]=9,交换后数组变为 2,3,4,8,5,4,6,9,c=7;i=5,a[5]=4<a[4]=5,交换后数组变为 2,3,4,8,4,5,6,9,c=5;i=4,a[4]=4<a[3]=8,交换后数组变为 2,3,4,4,8,5,6,9,c=4;此后不再满足交换条件,故输出 c=4。
3.(选考真题・2026年1月浙江信息技术选考 第12题)
有如下 Python 程序段:
#获取a的初始值,代码略
i=1
for j in range(1,len(a)):
if a[j]<a[0]:
a[i],a[j]=a[j],a[i]
i+=1
a[0],a[i-1]=a[i-1],a[0]
执行该程序段后,a 的值为 [2,4,3,5,6,9,7],则下列选项中不可能为 a[0] 的初始值的是( )
A. 2 B. 5 C. 6 D. 7
【参考答案与解析】
答案:D
解析:本题考查快速排序分区思想。程序将比 a[0] 小的元素依次交换到数组前部,最后把 a[0] 与 a[i-1] 交换,本质是一趟快速排序的分区。若 a[0]=7,则比 7 小的元素(2,4,3,5,6)都应位于 a[1:i] 内,但序列中的 9 不满足,故 a[0] 不可能为 7。
4.(选考真题・2024年1月浙江信息技术选考 第10题)
某算法的部分流程图如图所示,若 n 的值为 7,数组元素 a[0] 至 a[n-1] 依次存放 7,12,24,36,55,78,83,key 的值为 78,执行这部分流程后,输出 c 的值为( )
A. 1 B. 2 C. 3 D. 4
【参考答案与解析】
答案:B
解析:本题考查二分查找。该算法描述的是二分查找,构造二分查找树可知,变量 c 可看作查找过程中 key 与数组元素比较的次数。查找 78 的过程:mid=(0+6)//2=3,a[3]=36<78,low=4;mid=(4+6)//2=5,a[5]=78,找到。共比较 2 次,故 c=2。
备考要点总结
——考前回望,抓住得分点
1.冒泡排序:相邻两两比较、逆序交换,每一趟确定一个最值位置;交换次数等于逆序对数量。
2.选择排序:记录极值下标、一趟一交换,交换次数≤n-1;不稳定。
3.插入排序:把待排序元素插入已有序序列;数据基本有序时效率最高;注意数据移动次数。
4.二分查找前提是有序数据;while low≤high、mid=(low+high)//2、low=mid+1、high=mid-1,防死循环。
5.二分查找边界变式:求 key 第一次/最后一次出现位置、出现次数、第一个大于等于 key 的元素;查找不成功时 low 越界。
6.排序与查找综合:多重条件排序(成绩降序、姓名升序)、区间/奇偶位排序、按索引排序,以及“先排序、再查找”的综合题。
7.过程模拟题务必手动画图推演每一趟结果,切勿凭直觉。
2 / 3
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$