名称 | -2022届高三信息技术选考总复习 专题22 选择排序 课件(54张PPT) | | |
格式 | pptx | ||
文件大小 | 1.0MB | ||
资源类型 | 教案 | ||
版本资源 | 浙教版(2019) | ||
科目 | 信息技术(信息科技) | ||
更新时间 | 2021-11-01 10:33:07 |
iMin=p: iMax=p
For i=p+1 To q
If a(i)If a(i)>a(iMax) Then iMax=i
A
t=a(iMax): a(iMax)=a(q): a(q)=t
p=p+1
q=q-1
Loop
要使程序实现上述算法思想,则方框中的语句是( )
A.If iMax=p Then iMax=iMin B.If iMin=p Then iMin=iMax
C.If iMax=p Then iMin=iMax D.If iMin=p Then iMax=iMin
解析 该算法是对选择排序算法的改进,由原来的找到最大数(或最小数)后从一个方向排序改为从最小和最大两个方向同时进行排序;每趟排序a(iMin)为找到的最小数,a(iMax) 为找到的最大数;最小数a(iMin)和a(p)交换,排到前边,然后最大数a(iMax)和a(q)交换,排到后边,实现升序排列;在每一趟循环中,如果没有方框中的语句,在a(p)恰好为最大数a(iMax)(即imax=p)时,因为最小数a(iMin)和a(p)先进行交换,交换后a(iMax)会变成最小数,a(iMax)和a(q)再进行交换会把最小数交换到a(q)而出现错误;方框中的语句应为避免这一错误的语句,A正确。分析程序时可以从待选项中获取线索。
【变式7】 双向选择排序算法。在经典的选择
排序基础上,如果在选择出最小数的同时,
也能选择预见最大数并将两数放置合适位
置,这样就使排序效率提高一倍。依照上
述双向选择排序的算法,小张编写了一个
VB程序,功能如下:在列表框List中显示
排序前数据,单击“排序”按钮Command1,
在列表框List1中显示这些数据按升序排序后的结果。运行效果如上图所示。实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n=10
If b(j) t=b(i):b(i)=b(j):b(j)=t
End If
If b(j)>b(n-i+1) Then
t=b(j):b(j)=b(n-i+1):b(n-i+1)=t
End If
Next j
Next i
答案 ①n\2 ②n-i+1
解析 由于一趟实现了两个数字有序,因此只需排n\2即可,每趟排序的左边界是i,右边界是i的对称位置n-i+1。
1.(2020·11月温州)下列VB程序段功能为:在文本框Text1中显示整型数组元素a(1)到a(10)中的最小值和次小值。
k1 = 1: k2 = 10
For i = 2 To 10
If a(i) < a(k1) Then
End If
Next i
Text1.Text = Str(a(k1)) + ”,” + Str(a(k2))上述程序中方框处可选语旬为:①k1 =i ②k2=i ③k2=k1
则(1)(2)(3)处语句依次是( )
A. ①②③ B.③①② C.②①③ D.③②①
解析 从输出语句可知,数组元素a(k1)和a(k2)表示最小值和次小值。语句“If a(i)B
2.(2020·5月稽阳)对一个有n个元素的数组进行排序,下列说法正确的是( )
C
A.采用冒泡排序最多需要比较n* (n+1)/2次
B.采用冒泡排序肯定比采用选择排序交换的次数多
C.采用冒泡排序时,若发现某轮没有数据交换,可提前完成排序
D.采用选择排序时,每轮完成一头一尾两个元素的排序,可减少总交换次数
解析 本题考查排序的算法思想。A项冒泡排序需要比较n*(n-1)/2;B项冒泡排序一般比选择排序交换次数多,但极端情况下两者交换都可以为0次;D项选择双向排序可减少循环轮次,但不能减少交换次数。
3.有如下程序段:
i=1
Do While i <=6
a(i)=Int(Rnd*10)+1
If a(i) Mod 2=i Mod 2 Then i=i+1
Loop
For i=1 To 2
k=1
For j=1 To 6-i*2
If a(j)*k>a(j+2)*k Then
t=a(j): a(j)=a(j+2): a(j+2)=t
End If
k=-k
Next j
Next i
执行该程序段后,在下列选项中,a(1)~a(6)各元素值可能的是( )
A.1,8,3,4,9,4 B.9,4,3,4,1,8
C.1,3,4,4,8,9 D.9,8,4,4,3,0
解析 本题考核的知识点是程序的控制结构。产生的数组中数在[1,10],且偶数位上数必然是偶数。对产生的数进行按奇数位和偶数位分别排序,当j是奇数时k=1,当j是偶数时k=-1,因此奇数是升序排序,偶数是降序排序。
A
4.(2020·11月台州)依据选择排序思想:设计一个对数组a进行剔除重复数据后升序排序的程序。实现该功能的VB程序段如下:
i = 1
bottom = n ′n为a数组元素的个数
Do While i <= bottom - 1
k = i
For j = bottom To i + 1 Step -1
If a(j) < a(k) Then
k = j
ElseIf a(j) = a(k) Then
If ____(1)____ Then ____(2)____ Else ____(3)____
bottom = bottom - 1
End If
Next j
If k <>i Then t = a(k): a(k) = a(i): a(i) = t
i = i + 1
Loop
上述程序中方框处可选语句为:①k=j ②k=bottom ③a(j)=a(bottom)。则(1)、(2)、(3)处语句依次是( )
A. ②①③ B.②③① C.③①② D.①②③
解析 此题考查选择排序算法思想。外循环表示排序次数,内循环则表示在i+1到bottom个元素中查找最小值所在位置k并去重。若出现a(j)=a(k)则表示出现重复数据,由于每趟是从后往前查找,因此出现重复数据时,把最后一个数据a(bottom)赋值给a(j),同时有效数据的个数bottom减少一个,下次不再参加排序。当k=bottom时,说明当前最小值所在位置k刚好是最后一个元素,则需更新最小值所在位置k(k=j)。
A
5.有如下程序段:
For i = 1 To 2
k = i
For j = i + 1 To 5
If d(j)>d(k) Then k = j
Next j
t = d(k)
For j = k To i + 1 Step -1
d(j) = d(j - 1)
Next j
d(i) = t
Next i
数组元素a(1)到a(5)的值依次为“6,3,2,7,5”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为( )
A.7,6,2,3,5 B.7,6,6,2,5
C.7,6,3,2,5 D.7,6,5,2,3
解析 本题考查选择排序和插入排序的算法思想。外循环i表示排序的趟数,共排了2趟。在每趟中,先找出[i,n]之间的最大值的位置并把这个最大值存储在变量t中,再将[i,k-1]之间的数据往后移动,把最大值放在d(i)中。第1趟,找到最大值位置4,再把前面3个数往后移动,最大值放在d(1)中,结果为7 6 3 2 5。第2趟找到最大值位置2,没有移动数据位置。
C
6.有如下VB程序段:
s = ”7218634”
t = 0: n = Len(s)
For i = 1 To n - 1
a(i) = Val(Mid(s, i, 2))
Next i
For i = 1 To n - 2 Step 2
k = i
For j = i + 2 To n - 1 Step 2
If a(j) < a(k) Then k = j
Next j
If k <>i Then
temp = a(i): a(i) = a(k): a(k) = temp: t = t + 1
End If
Next i
Text1.Text = Str(t)
该程序段运行后,文本框Text1中显示的内容是( )
A.1 B.2 C.3 D.4
解析 本题考查选择排序的算法思想。字符串中有7个数字,从左到右每2个数字依次存储在数组a(1)至a(6)中。外循环变量i的值依次为1,3,5,内循环变量j的位置也是从i+2开始,每隔2位进行比较,因此只对6个数中的奇数位上数72,18,63进行升序排列,因此交换的次数为2次。
B