文档库 最新最全的文档下载
当前位置:文档库 › vb中一维二维数组应用

vb中一维二维数组应用

一维数组
排序

一、 选择排序法:

数据已经放在一维数组中,要求从小到大排序。


数组
20
4
36
……
45
109
3

下标
1
2
3
……
n-2
n-1
n



排序过程:

1、 从第1项到第n项选择最小值,然后将第1项与最小项交换。

2、 从第2项到第n项选择最小值,然后将第2项与最小项交换。

3、 ……

4、 从第n-1项到第n项选择最小值,然后将第n-1项与最小项交换。

注意:最小值及下标由临时变量存储。

所以,需要两层循环:外层循环i执行n-1次,内层循环j执行n-i-1次

For i=1 to n-1

最小值及下标由临时变量存储

tmpVal=第i项值

tmpId=第i项下标

For j=i+1 to n

若tmpVal >第j项值,则:

tmpVal=第j项值

tmpId=第j项下标

next

将第i项与最小项交换

Next

从大到小呢?

二、 冒泡排序法:

数据已经放在一维数组中,要求从小到大排序。


数组
20
4
36
……
45
109
3

下标
1
2
3
……
n-2
n-1
n





两种方法:小数上浮和大数下沉。

小数上浮排序过程:从第n项到第k项,依次相临两项比较,若第m项小于第m-1项,则两项交换。(k从2到n)

第1次执行:结果是第1项至第n项中的最小值放到第1项中

1、 若第n项小于第n-1项,将第n项与第n-1项交换。

2、 若第n-1项小于第n-2项,将第n-1项与第n-2项交换。

3、 ……

4、 若第2项小于第1项,将第2项与第1项交换。

第2次执行:结果是第2项至第n项中的最小值放到第2项中

1、 若第n项小于第n-1项,将第n项与第n-1项交换。

2、 若第n-1项小于第n-2项,将第n-1项与第n-2项交换。

3、 ……

4、 若第3项小于第2项,将第3项与第2项交换。

……

第n-1次执行:

1、 若第n项小于第n-1项,将第n项与第n-1项交换。

所以,需要两层循环:外层循环i执行n-1次,内层循环j执行n-i次

For i=1 to n-1

For j=n to i+1 step -1

若第j项值<第j-1项值,则:

tmp=第j-1项值

第j-1项值=第j项

第j项值= tmp

next

Next

大数下沉排序过程:从第1项到第k项,依次相临两项比较,若第m项大于第m+1项,则两项交换。(k从n-1到1)

For i=n to 2 step -1

For j=1 to i-1

若第j项值>第j+1项值,则:

tmp=第j+1项值

第j+1项值=第j项

第j项值= tmp

next

Next

从大到小呢?

查找

一、 顺序查找法:

数据已经放在数组中



数组
20
4
36
……
45
109
3

下标
1
2
3
……
n-2
n-1
n



查找方法:从第1项到第n项依次与待查找的数比较。

For i=1 to n

待查找的数与第i项值相等?相等则返回i值,终止循环。

next

二、 折半查找法:

数据已经放在一维数组中,要求:数组中的数已经排序。




3
4
20
36
45
109

1
2
3
4
5
6




查找方法:

与第(1+n)\2项比较,若小于该项则在下标区间(1,(1+n)\2-1)中的项之间查找,否则在下标区间((1+n)\2+1,n)中的项之间查找。

如:在上表数组中查找45

1、 比较第(1+6)\2项,即第3项,45>20,则在(4,6)之间查找。

2、 比较第(4+6)\2项,即第5项,则找到。

3、 若查找的是47,则接着在(6,6)之间查找,比较第(6+6)\2项,即第6项,然后在(7,6)之间比较,因区间左大于右,所以查找结束。

程序代码(b数组为从小到大排序):

Dim i As Integer, j As Integer, tmp As Integer, bool As Boolean, n As Integer

Rem i,j 查找的下标区间,tmp为区间的中间下标,n为待查找的数。

bool = True

i = 1: j = UBound(b)

Do While i <= j And bool

tmp = (i + j) \ 2

Select Case b(tmp)

Case Is > n

j = tmp - 1

Case Is < n

i = tmp + 1

Case n

bool = False

End Select

Loop

If bool then 未找到



插入

一般指有序序列插入

方法:

1、 查找:查找比待插入的数大的数(最接近的)

2、 插入:若找到的数的下标为k,则从第n项到第k项开始,依次向后移动,即第n项移动到第n+1项,第n-1项移动到第n项,……,第k项移动到第k+1项,然后在第k项放入插入的数。

删除

方法一:删除第k项

从第k+1项到第n项开始,依次向前移动,即第k+1项移动到第k项,第k+2项移动到第k+1项,……,第n项移动到第n-1项。

方法二:删除=N的值

1、 查找:查找=N的数

1、 找到:该数在数组中下标为k,则从第k+1项到第n项开始,依次向前移动,即第k+1项移动到第k项,第k+2项移动到第k+1项,……,第n项移动到第n-1项。


二维数组的应用:矩阵

一、 生成矩阵并显示(以4*4矩阵为例)

两重循环

Dim a(1 to 4,1 to 4) as integer ‘4*4矩阵,其值由行*10+列值组成

For i=1 to 4

For j=1 to 4

a(i,j)=i*10+j

print a(i,j);

next

print ‘输出一行后换行

next

二、 矩阵的对角线

For i=1 to 4

For j=1 to 4

If i+j=5 or i=j then

print a(i,j);

else

print spc(4);


end if

next

print ‘输出一行后换行

next

三、 矩阵转置

1、 只在输出时转置

For i=1 to 4

For j=1 to 4

print a(j,i);

next

print ‘输出一行后换行

next



2、 将数组改为转置后的形式

For i=1 to 4

For j=1 to i-1

tmp= a(j,i)

a(j,i)=a(i,j)

a(i,j)=tmp

next

next

四、 行互换(如1行和3行在输出时互换)在数组中互换呢?

For i=1 to 4

If i=1 then

p=3

Elseif i=3 then

p=1

else

p=i

end if

For j=1 to 4

print a(p,j);

next

print ‘输出一行后换行

next



一、 列互换(如2列和4列在输出时互换) 在数组中互换呢?

For i=1 to 4

For j=1 to 4

If j=2 then

p=4

Elseif j=4 then

p=2

else

p=j

end if

print a(i,p);

next

print ‘输出一行后换行

next




相关文档