内容正文:
冒泡排序
1、冒泡排序基本思想
将n个数据看作竖向排列的一组数据,每趟排序自下而上对每对相邻数据进行比较,若次序不符合要求就进行交换,每趟排序结束时都能使排序范围内关键字最小的记录像一个气泡一样升到上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最小、次小……的各个数据冒到表的第一个、第二个……位置上。
★ 用冒泡排序对n个数据进行排序时,共需进行n-1趟排序,比较的总次数为
例1:对10个数据进行冒泡排序,需要比较的次数是( )
A.90 B.110 C.45 D.55
例2:篮球联赛中,有5个班级的比赛积分依次为14,11,13,8,9。若采用冒泡排序算法对其进行从小到大排序,则完成第二遍时的结果是( )
A.8,11,13,14,9 B.8,9,13,14,11 C.8,9,14,11,13 D.14,13,11,9,8
例3:某书店在5所学校流动售书量(单位:本)分别是88,110,48,64,35。采用冒泡排序法对其进行排序,若完成第一遍时的结果是:35,88,110,48,64,则完成第二遍时的结果是( )
A.35,88,110,48,64 B.35,48,88,64,110
C.35,48,88,110,64 D.35,48,64,88,110
例4:某市组织了一次我心目中最喜爱的球队的评比活动,6个球队网上投票数为201、287、501、189、397、295,若采用冒泡排序算法对其进行从大到小排序,则第三遍加工后的结果是( )
原数据
201
287
501
189
397
295
第一遍
501
201
287
397
189
295
第二遍
501
397
201
287
295
189
第三遍
A.501 397 295 287 201 189 B.501 397 201 287 295 189
C.501 397 295 201 189 287 D.501 397 295 201 287 189
2、冒泡排序程序实现
说明:以存放d数组n个数据升序为例的程序如下:
教材实例
冒泡变式
For i=1 To n-1
For j=n To i+1 Step -1
If d(j)<d(j-1) Then
temp=d(j):d(j)=d(j-1):d(j-1)=temp
End If
Next j
Next i
’降序只需将d(j)<d(j-1)改为If d(j)>d(j-1)即可
For i=1 To n-1
For j=1 To n-i
If d(j)>d(j+1) Then
d(j)=d(j)+d(j+1):d(j+1)=d(j)-d(j+1)
d(j)=d(j)-d(j+1)
End If
Next j
Next i
★ temp=d(j):d(j)=d(j-1):d(j-1)=temp 与
d(j)=d(j)+d(j+1):d(j+1)=d(j)-d(j+1):d(j)=d(j)-d(j+1) 为两种不同的交换数组中数据的方式
1
例1:有如下程序段:
s=“”
For i=1 To 3
For j=7 To i+1 Step-1
If a(j)<a(j-1) Then
k=a(j):a(j)=a(j-1):a(j-1)=k
End If
Next j
s=s+Str(a(i))
Next i
Text1.Text=s
数组元素a(1)到a(7)的数据依次为“3,9,1,5,8,6,2”,经过该程序段“加工”后,文本框Text1中显示的内容是( )
A.1 2 3 B.9 8 6
C.3 9 1 D.8 6 2
例3:已知字符串a(1)到a(6)的原始数据为“118”,
“36”,“98”,“15”,“88”,“2”,为了对该数组进行排序操作,小吴编写了以下VB程序:
For i=1 to 3
For j=6 t