冒泡排序算法程序实现
经典算法之
一、冒泡排序算法的基本思想
用冒泡排序法把4位同学的身高(179,166,183,172)按低到高排序。
(1)把待排序的n个元素看成是垂直堆放的一列数据。
(2)从最下面的一个元素起,自下而上地比较相邻的两个元素中
的数据,将较小(按升序排序)的数据换到上面一个元素中。重复
这一过程,直到处理完最后两个元素中的数据,称为一遍加工。
(3)对余下的n-1个元素重复上述过程,直至最后进行余下两个数
据元素的比较和交换。
初始
(n=4)
179
166
183
172
第1次比
较、交换
第2次比
较、交换
第3次比
较、交换
179
166
183
172
72
83
179
166
172
183
179
166
172
183
66
79
第1遍加工
第1次比
较、交换
第2次比
较、交换
第1次比
较、交换
166
179
172
183
166
179
172
183
2
9
166
172
179
183
第2遍加工 第3遍加工
二、程序实现
1、升序排序
① 相邻两两比较,逆序交换
② 怎么实现一遍加工?
③ 总共进行几遍加工?
初始
179
166
183
172
第1次比
较、交换
第2次比
较、交换
第3次比
较、交换
179
166
172
183
179
166
172
183
166
179
172
183
第1遍加工
第1次比
较、交换
第2次比
较、交换
第1次比
较、交换
166
179
172
183
166
172
179
183
166
172
179
183
第2遍加工 第3遍加工
4→2 4→3 4→4
i
n
a(j)
数
组
a
a(4), a(3), a(2) a(4), a(3) a(4)
j
冒泡排序加工遍数
数据个数 最多需要几遍 范例
2 179,166
3 179,166,183
4 179,166,183,172
5 179,166,183,172,175
n
1
2
3
4
n-1
二、程序实现
1、升序排序 For i= 1 To n-1
For j=n To i+1 Step -1
If a(j)a(j-1)
【例1】实现某排序算法的部分VB程序段如下:
For i = 1 To 4
For j = 8 To i+1 Step -1
If d(j) < d(j-1) Then t = d(j): d(j) = d(j-1): d(j-1) = t End If Next j s = s + Str(d(i)) Next i Text1.Text = s 若数组元素d(1)到d(8)的数据依次为 “12,7,18,13,9,17,6,23”,运行该程序段后,文本框 Text1中显示的内容是 A.6 7 9 12 B.23 18 17 13 C.12 7 18 13 D.9 17 6 23 If d(j) > d(j-1) Then
s = Str(d(i)) + s
假设有某数组:67,86, 58,93,47
• 第一遍加工:47,67,86,58,93
• 第二遍加工:47,58,67,86,93
3、优化冒泡排序算法
优化思路:
某一遍加工过程中没有数据交换,说明数
据已有序,无需进一步加工。
For i= 1 To n-1
flag = False
For j=n to i+1 Step -1
If a(j)