计算机考试二级VB常用算法(6):排序
1.算法说明
1)按选择排序
(1)从N个数中选择最小数的下标,将最小数和第一个数之间的位置切换出循环;
(2)除第一个数外,按方法(1)从剩余的n-1个数中选择下一个最小的数,与第二个数交换位置;
(3)以此类推,最终形成一个递增序列。
例如:
8 6 9 3 2 7
第一次交换后269387
第二次交换后239687
第三次交换后236987
第四次交换后2 3 6 7 8 9
第五轮无交换2 3 6 7 8 9
程序代码如下:
私有子xzpaixu(子如果盛为假,则按降序排列。
Dim i As Integer,As Integer
Dim temp As double
Dim M As Integer
For I = lbound(a)To ubound (a)-1 ' For array size-1 round comparison
M = I '在I round comparison中,我们假设第
'个元素是j = i+1到UBound(a)中最有价值的元素
,在其余元素中找出最有价值的元素的下标并记录下来否则,记录元素下标
if a(j)< a(m)then m = j
else
if a(j)> a(m)then m = j
end if
next j '将最有价值的元素与第一个
a(I)= a(m)
a(m)= temp
next I
end sub
调用此过程的示例:
dim b(6)As Double
b(1)= 8
b(2)= 6
b(3)= 9
b(4)= 3
b(5)= 2
b(6)= 7
Call xzPaiXu(b,True)
For i% = 1到6
Print b(I)
Next
End Sub
2)冒泡排序
选择排序方式,找到每一轮排序中最有价值元素的下标,走出内循环(一轮排序结束),然后交换最小数的位置;冒泡法在每一轮排序中比较相邻的数,当顺序不对时,改变位置,出内循环,出现最大数。
例如:
869327
869327
869237
862937
826937
286937
2 8 6 9 7
...
2 3 6 8 7 9
...
2 3 6 7 8 9
2 3 6 7 8 9
程序代码如下:
As,sheng as boolean)
' A是要排序的数组。如果盛为真,则按升序排序;如果sheng为False,则按降序排序。
Dim i As Integer,As Integer
Dim temp As double
Dim m As Integer
For I = lbound(a)To UBound(a)-1 ' For n-1 round comparison
For j = UBound(a)To+1 step-1 '两两两比较n到I的元素
if she '如果顺序不对,立即交换
if a> a(j-1)then
temp = a(j)
a(j)= a(j-1)
a(j-1)= temp
end if
end if在一轮排序结束时
'最有价值的元素排在最前面
next I
end sub
调用这个过程的代码基本和上面一样。
2.实践练习
1)补充代码(2003年10月2日)
下面是一个程序,它使用拉锯式排序方法对数组的元素进行升序排序。所谓“拉锯排序法”,就是这一次把最小的元素从下往上送到最上面的位置,下一次就把从上往下的元素送到最下面。
Option Base 1
Private Sub command 1 _ Click()
Dim a(10)As Integer,i As Integer
For i = 1到10
a(I)= Int(Rnd * 10)+1
text 1 = text 1 & Str(a(I))
接下来i
调用shaker_sort(a)
For i = 1到 d As Integer
Dim t As Integer
c = 1
d =(1)
Do
For(2)Step-1
If k(I = 1)> k(I)Then
t = k(I-1):k(I-1)= k(I):k(I)= t
End If
Next I
(3)
For I =
0条评论