-
VB
常考算法(八)排序:
1
、算法
1
)选择法排序
算法说明:
根据上例中求最小值的思路,
我们可以使用如下
方法进行从小到大排序:
第
一轮,
以第
一个元素逐个跟后面的所有元素比较,
如果比后面的元素大就进行交换,
经过一
轮比较,
第一个元素被确定为最小;
同样的方法,
下一轮以第二个元素跟剩下的所有元素进
行比较确定下次小的元素;以此类推…
下面我们以图形的
形式体现对
5
个数进行选择排序的过程:
第一轮:
1
1
6
2
2
最小值
6
6
2
6
6
4
4
4
4
4
2
2
1
1
1
5
5
5
5
5
第二轮:
1
1
1
1
2
6
4
2
次小值
6
4
6
6
4
2
2
4
5
5
5
5
第三轮:
第四轮:
1
1
1
1
1
2
2
2
2
2
4
4
6
4
4
6
5
4
6
6
5
6
5
5
5
从上图可以发现对
5
个元素进行排序,
总共经过了
5-1=4
轮,
而每一轮中比较的次数也
< br>不相同,第一轮
2
、
3
、
4
、
5
号元素参与跟
1
号元素的比较,共
< br>4
次,第二轮
3
、
4
、
5
号元
素参与跟
2
号元素的比较,共
3
次,以次类推,比较次数逐步减少。经过四轮的比较,利用
逐
步求最小值的方法将
5
个数从小到大排好序。
< br>对于这样一个排序的过程,
我们可以使用两
个循环分别控
制比较的轮数和每一轮的次数。
程序代码:
Private Sub
Command1_Click()
Dim n As Integer
n = InputBox(
请输入数组元素的个数:
Dim a() As Integer, i As
Integer, j As Integer
Print
排序前:
ReDim
a(n)
For i = 1 To n
a(i) = Int(Rnd * (99 - 10 + 1) + 10)
Print a(i);
Next i
For i = 1 To n - 1
For j = i To
n
If a(i) > a(j) Then
temp = a(i)
'
交换元素
a(i) = a(j)
a(j) = temp
End If
Next j
Next i
Print
Print
排序后
:
For i = 1
To n
Print a(i);
Next i
End Sub
2
)冒泡法排序
算法说明:
相邻的元素进行比较,
如果前面的元素比后面的
元素大,
则将它们进行交换,
具体思路:设在数组
a
中存放
n
个元素,第一轮
,将
a(1)
和
a(2)
进行比较,若
a(1)>a(2),
则交换这两个元
素的值,然后继续用
a(2)
和
a(3
)
比较,若
a(1)>a(2)
,则交
换这两个元素
的值,
以此类推,
直到<
/p>
a(n-1)
和
a(n)
进行比较处理后,
a(n)
中就存放了
n
个数中最大的值;
第二轮,用
a(1)
与
a(2),a(2)
与<
/p>
a(3),
…
,a(n-2)
与
a(n-1)
进行比较,处理方法相同,这一<
/p>
轮下来,
a(n-1)
中存放
n
个数中第二大的值;…;第
n-1
轮,
a(1)
与
a(2)<
/p>
进行比较处理,
确保最小值在
a(1)<
/p>
中。经过
n-1
轮比较处理,
n
个数已经按从小到大的顺序排列好。
下面我们以图形的形式体现对
5
个数进行冒泡排
序的过程:
第一轮:
2
2
6
2
2
4
4
2
6
4
1
1
4
4
6
6
5
最大值
1
1
1
第二轮:
5
6
5
5
5
2
2
2
2
4
4
1
1
1
1
4
4
5
5
5
5
6
6
6
6
第三轮:
第四轮:
1
1
1
1
2
2
2
2
2
1
4
4
4
4
4
5
5
5
5
5
6
6
6
6
6
程序代码:
Private Sub
Command1_Click()
Dim n As Integer
n = InputBox(
请输入数组元素的个数:
Dim a() As Integer, i As
Integer, j As Integer
Print
排序前:
ReDim
a(n)
For i = 1 To n
a(i) = Int(Rnd * (99 - 10 + 1) + 10)
Print a(i);
Next i
For i = 1 To n - 1
For j = 1 To
n - i
If a(j) > a(j + 1)
Then '
相邻元素比较
temp = a(j)
a(j) = a(j
+ 1)
a(j + 1) = temp
End If
Next j
Next i
Print
Print
排序后
:
For i = 1
To n
Print a(i);
Next i
End Sub
2
、实战练习
1
)填程序一
算法说明:
C
盘根目录下的数据文件
中有两组数据,第一组数据未排
序,
并
以
-1
表示该组数据结束;
第二组数据
按从小到大顺序排列。
下面程序的功
能是,
单击
“读入数据”
按钮,
将文件中
的两组数据,
分别读入到
A
、
B
数组中,
单击“插入排序”按钮,则把
A
数组的元素按其大小依次插入到
B
数组的适当
位置,使得
B
数组中元素仍为从小到大排列。完善程序,实现以上功能。
-
-
-
-
-
-
-
-
-
上一篇:leach分簇算法仿真基于matlab
下一篇:指南-脑血管中国脑小血管病诊治共识