vb中一维二维数组应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vb 中一维二维数组应用.txt 数据已经放在一维数组中,要求从小到大排序。
数组 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 项值
两种方法:小数上浮和大数下沉。 小数上浮排序过程:从第 n 项到第 k 项,依次相临两项比较,若第 m 项小于第 m-1 项,则两 项交换。 从 2 到 n) (k 第 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 项
二维数组的应用:矩阵 一、 两重循环 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 生成矩阵并显示(以 4*4 矩阵为例)
print a(i,j); next print next 二、 矩阵的对角线 ‘输出一行后换行
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 项。
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 ‘输出一行后换行
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
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 ‘输出一行后换行
几处早莺争暖树,谁家新燕啄春泥。微微风簇浪,散作满天星。
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
第 j 项值= tmp next Next 大数下沉排序过程:从第 1 项到第 k 项,依次相临两项比较,若第 m 项大于第 m+1 项,则两 项交换。 从 n-1 到 1) (k 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 二、 折半查找法:
数据已经放在一维数组中,要求:数组中的数已经排序。
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
数组 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 项值
两种方法:小数上浮和大数下沉。 小数上浮排序过程:从第 n 项到第 k 项,依次相临两项比较,若第 m 项小于第 m-1 项,则两 项交换。 从 2 到 n) (k 第 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 项
二维数组的应用:矩阵 一、 两重循环 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 生成矩阵并显示(以 4*4 矩阵为例)
print a(i,j); next print next 二、 矩阵的对角线 ‘输出一行后换行
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 项。
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 ‘输出一行后换行
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
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 ‘输出一行后换行
几处早莺争暖树,谁家新燕啄春泥。微微风簇浪,散作满天星。
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
第 j 项值= tmp next Next 大数下沉排序过程:从第 1 项到第 k 项,依次相临两项比较,若第 m 项大于第 m+1 项,则两 项交换。 从 n-1 到 1) (k 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 二、 折半查找法:
数据已经放在一维数组中,要求:数组中的数已经排序。
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