冒泡排序法作为二级考试中比较常见的题目,难点有3个
数组定义
变量值交换
排序算法的实现
前两个比较简单,后面的我来分析一下,首先以升序(从小到大)为例
第1步 第一个数与第二个数比较,如果第一个数大于第二个,则交换变量,直到倒数第二个数(i-1),将最大的排在最后面
第2步 最大的数被推倒最后,故不用管它,继续执行第一步,但执行到上一步倒数第二个数之前一个数(j-i)
分析步骤可以看出,这个过程需要两个循环进行嵌套,现在以数组上标为 变量 i 为例,代码如下
'该代码测试时点击窗体执行,复制代码请单击两张纸图标,查看代码请单击两张纸图标左边的图标↑↑
Private Sub Form_click()
Dim a(1 To 5) As Integer
a(1) = 37
a(2) = 21
a(3) = 56
a(4) = 23
a(5) = 20
n = UBound(a) '取得数组上界
'可替换代码开始
For j = n - 1 To 1 Step -1 '范围逐渐缩小
For i = 1 To j Step 1 '两两交换
If a(i) > a(i + 1) Then '第18行
ls = a(i)
a(i) = a(i + 1)
a(i + 1) = ls
End If
Next i
Next j
'可替换代码结束
For i = 1 To n Step 1
num = num & a(i) & " " '将排序好的数组保存到变量
Next i
Print num '打印数组
End Sub
当然嵌套循环那部分也可以写成这样,这也是网上的一般写法
For j = 1 To n - 1 Step 1 '范围逐渐缩小
For i = 1 To n - j Step 1 '两两交换
If a(i) > a(i + 1) Then
ls = a(i)
a(i) = a(i + 1)
a(i + 1) = ls
End If
Next i
Next j
step 1此时可以省略
当然,步骤也可以这样,把最小的排在最前面
第1步 倒数第一个数与倒数第二个数比较,如果倒数第一个数小于倒数第二个,则交换变量,直到第二个数 2
第2步 最小的数被推倒最前,故不用管它,继续执行第一步,但执行到上一步第二个数之后一个数 3
替换代码那段换成这样
For j = 2 To n Step 1 '范围逐渐缩小
For i = n To j Step -1 '两两交换
If a(i) < a(i - 1) Then
ls = a(i)
a(i) = a(i - 1)
a(i - 1) = ls
End If
Next i
Next j
至于降序排列,之前代码里面的判断语句将 ">" 改为 "<" 或者 "<" 改为 ">" 即可,就是这样>< >< >< >< > < >< > < >< ><