1、专题17排序算法知识点一冒泡排序算法思想1.有一个数组,采用冒泡排序,第一遍排序后的结果为:4,10,5,32,6,7,9,17,24该数组的原始顺序不可能的是()A.10,5,32,6,7,9,17,24,4B.10,5,32,6,7,9,4,17,24C.10,5,32,4,6,7,9,17,24D.4,10,5,32,17,9,24,6,72.有一个数组采用冒泡排序,第1遍排序后的结果为:3,18,5,35,8,9,11,13,32,那么该数组的原始顺序不可能是()A.18,5,35,8,9,11,3,13,32B.3,18,5,35,13,11,32,8,9C.18,5,35,3,8,
2、9,11,13,32D.18,5,35,8,9,11,13,32,33.列表s包含8个互不相等的元素,即s0,s1,s2,s7,有如下Python程序段:n8for i in range(n1): for j in range(n1,i1,1): if sjsj1: sj,sj1sj1,sj该程序段实现的是()A.s0到s7的降序排列B.s0到s7的升序排列C.s1到s7的降序排列D.s1到s7的升序排列4.列表中有n个互不相等的元素,即s0,s1,s2,sn1,有如下Python程序段:for i in range (1)_): for j in range (2)_): if sjsj1:
3、 sj,sj1sj1,sj上述程序段中划线处可选代码为:0,n11,n11,n1,ni1 1,ni1,ni1为完成元素的排序,(1)(2)处代码依次为()A. B. C. D.5.互不相等的10个列表元素s0,s1,s2s9,有如下Python程序段:n10for i in range( 5): for j in range(1,ni): if sjsj1: sj,sj1sj1,sj该程序段实现的是()A.s0到s5的降序排列B.s0到s5的升序排列C.s5到s9的降序排列D.s5到s9的升序排列6.列表a中存储了8个元素,即a0,a1,a7,有如下Python程序段:n8for i in r
4、ange(n1):for j in range(n1,i,1):if ajaj1 % 3:aj,aj1aj1,ajprint(a)以下运行结果不可能的是()A.20,50,10,40,30,60 B.5,8,1,3,4,6C.9,17,16,4,12,5 D.17,11,1,4,9,68.有如下Python程序段:a3,6,7,2,8,2;b5,3,7,7,7,4for i in range(len(a)1): for j in range(0,len(a)i1): if ajaj1 or ajaj1 and bjbj1: aj,aj1aj1,aj bj,bj1bj1,bj执行上述程序段后,a
5、1与b1的值分别是()A.8,7 B.7,7 C.2,4 D.2,79.有如下两段Python程序:s for i in range(5): for j in range(0,6i1): if ajaj1: aj,aj1aj1,aj sstr(ai),print(s)若数组a的元素为34,33,25,46,17,77,则下列说法不正确的是()A.两段程序的比较次数一样B.两段程序的交换次数一样C.两段程序的输出结果一样D.两段程序都能实现数组a降序排序10.数组a中存储着全校学生的学号和BMI信息,格式为0101,19.2,0102,18.5,0103,20.1,。其中每条数据的第一项为学号,
6、第二项为BMI值。数组a已经按学号升序排序,现要求按照BMI值进行降序排序,BMI相同情况下仍然按照学号保持升序。则下列程序段可以实现该功能的是()A.for i in range(1,n):for j in range(ni): if aj1aj: aj,aj1aj1,ajB.for i in range(1,n): for j in range(ni): if aj1aj11: aj,aj1aj1,ajC.for i in range(1,n): for j in range(n1,i1,1): if aj1aj11: aj,aj1aj1,aj知识点二冒泡排序的应用1.有以下Python程
7、序段:n6s5,9,8,6,7,1for i in range(3): for j in range(_): if sjint(aj11) and aj2aj12: aj,aj1aj1,aj elif _: aj,aj1aj1,ajA.1,ni1 aj2女and aj12男B.n1,i,1 aj2男and aj12女C.1,nI aj2女and aj12男D.n1,i1,1 aj2男and aj12女3.某Python程序如下:a3,8,6,2,3for i in range(len(a)1,1,1):if ai%20: for j in range(i): if ajaj1: aj,aj1a
8、j1,ajprint(a)程序运行后,输出的结果是()A.2,6,8,3,3 B.3,3,2,6,8C.2,3,6,8,3 D.2,3,3,6,84.有如下Python程序段:aint(input(输入参数a:)bint(input(输入参数b:)cint(input(输入参数c:)for i in range(a,b,c): if fiaj1: aj,aj1aj1,aj执行该程序段后,a的值是()A.9,7,6,1,5,2 B.9,7,6,5,2,1C.1,2,5,6,7,9 D.9,6,7,5,2,16.有如下Python程序段:lst74,32,66,46,38,28,85k1for i
9、 in range(len(lst)1):if lsti*kdj1: dj,dj1dj1,dj pjif qp:breakqpprint(cnt)运行该程序段后,变量cnt的值为()A.8 B.7 C.6 D.58.数组a包含10个互不相同的元素,即a0,a1,a9,其中a0,a2,a8称为奇数位元素,a1,a3,a9称为偶数位元素。有如下Python程序段:nlen(a)for i in range(n/21): for j in range(n2,2*i,2): if ajaj1: aj,aj1aj1,ajprint(a0:4)程序段执行后,输出的结果不可能是()A.34,26,21,19
10、 B.34,26,21,17C.34,26,17,19 D.34,17,19,1310.拍毕业照时需要两边低,中间高的队形。例如有身高数据a为157,165,172,179,182,最后的队形为:165,179,182,172,157。有如下Python程序段实现了该功能,两处代码正确的是()nlen(a)for i in range(n1):if _:for j in range(i/2,ni/21): if ajaj1: aj,aj1aj1,ajelse:for j in _: if ajLj or i%20 and LiLj: Li,LjLj,Li执行以上程序段,数组L的值不可能的是()
11、A.93,15,60,62,40,65,16,90B.80,20,79,41,19,88,18,99C.50,84,44,39,41,50,19,11D.96,11,69,16,29,46,28,8012.小明编写Python程序对本校跳高测试成绩进行排序,规则如下:按照性别分别对成绩进行降序排序并输出名次(女生排前,男生排后,同分同名次),计算结果如图所示。(1)程序中加框处代码有错,请改正。(2)请在划线处填入合适的代码。#把文件中的原始数据导入到数组a中,其中a00存储姓名,a01存储跳高成绩,a02存储性别,a10到a12存储第一位学生的相关信息,以此类推。代码略for i in ra
12、nge(1,_):for j in range(1,len(a)i):if int(aj1)aj1。B选项位置0不参与排序。C选项题干要求BMI相同的情况下仍然按照学号保持升序,加了等号学号大的会排在前面。知识点二1.C本题考查冒泡排序。该算法实现前4个数据的升序排列,因此排序的区间为0,4,若要从后往前排序,第1项为n3,结束位置为i1。若要从前往后排序,则j的初值为1,当i为0时,最后的索引为n3,因此j的终值为ni3,但终值必须为ni2才可以取到ni3。2.C本题考查冒泡排序算法思想。排序的方向和区间。若从前往后排序,后面的数据先有序,第i趟排序的区间为0,n1i,比较对象位置为j和j1
13、,因此range的初值为1,终值为n1i1。若从后往前排序,前面的数据先有序,第i趟排序的区间为n1,i,因此range的初值为n1,终值为i11,步长为1。交换的条件。要求女生在前,男生在后,同性别按成绩降序排序。女生在后,男生在前需进行交换。3.C本题考查冒泡排序,当ai是偶数时排序,因此3不参与排序,第一趟结果为3,8,6,2,3,再依次进行排序。4.D本题考查冒泡排序的算法思想。比较对象是相邻两个数,比较条件fifi1,因此可以确定为一趟降序排列。根据step的值,可以从前往后冒泡,也可以从后往前冒泡。步长可以是1,也可以是2或更大。A选项可能是从前往后步长为1升序排列。B选项a的初值
14、为1,Step为2,i的值为1,3,5,和他相邻的偶数比较。C选项前两项没有参加排序,a的初值为3,步长为1。D选项实现分组排序,不能满足要求。5.A从后往前冒泡,排了3趟。第1趟结果为9,1,5,2,7,6;第2趟结果为9,7,1,5,2,6;第3趟结果为9,7,6,1,5,2。6.D本题主要考查Python程序的执行。分析程序可知,每次循环k都变号,如果满足lsti*k32,3266,6646,4628,2885,故满足if判断的只有46aj1来看,实现降序排列。A选项至少排4趟,B选项只排2趟,D选项未排序,C选项第1趟排序过程中,17和19要交换位置。10.B变量i表示排序的趟数也表示
15、位置。奇数趟从前往后排,偶数趟从后往前排。11.C本题考查冒泡排序算法。算法实现偶数位升序,奇数位降序排列。12.(1)aj12女 and aj2男 (2)len(a)1ai3ai13 tt1或t1解析本题考查双关键字排序和顺序查找算法。(1)先按照性别和成绩进行降序排序,发生数据交换的情况有两种情况:一是性别相同,成绩大的在后,二是男生在前,女生在后。a01存储跳高成绩,a02存储性别,条件“int(aj1)int(aj11) and aj2aj12”表示性别相同的情况,那么另外一种情况是男生在前,女生在后,因此加框处应修改为aj12女 并且aj2男。(2)a00存储“姓名”文字,a01存储“跳高成绩”文字,因此共有len(a)1条记录,当第len(a)2条记录有序时,整个列表已经有序了,因此处答案为len(a)1。接下来按成绩进行对全体学生名次进行赋值,语句a131表示成绩最高的第1位女生排名为1,条件ai1!ai11成立,表示该学生与前面一位学生成绩不相同,他的名次号就是当前序号,如果成绩相同,名次与前一位学生名次相同,因此处答案ai3ai13。男生名次号是紧跟在女生后面赋值的,条件ai2女表示当前记录为女生,如果该条件不成立,表示男生的名次值,ai3ai3t,t为女生的人数,因此处将对女生进行计数,答案为tt1。