
vb数组
首席官-预充式注射器
2023年3月19日发(作者:st盐湖)算法:
Fori=1ton-1‘i表示比较轮数
Forj=i+1t0n‘J表示每轮比较次数
Ifa(i)>a(j)thent=a(i):a(i)=a(j):a(j)=t‘如果发现后面的数比前面的数小,则两数位置
进行交换
Nextj
Nexti
举例:有如图窗体,两个文本框、两个标签和一个命令按钮,编程实现:单击命令按钮后,
随机产生10个两位正整数放在text1中,每行一个,并使用选择排序算法排序后显示在text2
一、冒泡排序法
算法思路:位置相邻两数进行两两比较,在比较时如果发现前面的数比后面的数大,则
进行交换,都比较完一轮后,把最大一个数放到最后,如此进行下去即可完成冒泡排序。
算法:
Fori=1ton-1‘i表示比较轮数
Forj=1t0n-i‘J表示每轮比较次数
Ifa(j)>a(j+1)thent=a(j):a(j)=a(j+1):a(j+1)=t‘如果发现前面的数比后面的数大,则两
数位置进行交换
Nextj
Nexti
举例:随机产生20个100以内的正整数,按从小到大的顺序输出在窗体上,每行5个。
Privatesubform_click()
Dimx(1to20)asinteger
Fori=1to20
X(i)=int(rnd*99)+1‘随机产生100以内的随机数
Nexti
Rem冒泡排序
Fori=1to19
Forj=1to20-i
Ifx(j)>x(j+1)thent=x(j):x(j)=x(j+1):x(j+1)=t
Nextj
Nexti
Rem按每行5个数输出
Fori=1to20
Printx(i);
Ifimod5=0thenprint‘如果每行输到5个数,则换行
Nexti
Endsub
二、比较交换法
算法思路:假设第一个数最小,然后第一个数依次与后面的每一个数都进行比较,若比
较时发现后面的数比第一个数小,则两数位置进行交换,全部都比较完算一轮,每一轮比较
完后,第一个数是最小的数,如此进行即可完成比较排序。
文本框中,也是每行一个。
PrivateSubCommand1_Click()
Dima(1To10)AsInteger
Fori=1To10'产生10个两位正整数,并放到text1文本框中
a(i)=Int(Rnd*90)+10
=&a(i)&vbCrLf
Nexti
Rem排序
Fori=1To9
Forj=i+1To10
Ifa(i)>a(j)Thent=a(i):a(i)=a(j):a(j)=t
Nextj
Nexti
Rem把排序好的数组放到text2文本框中
Fori=1To10
=&a(i)&vbCrLf
Nexti
EndSub
算法思路:假设第一个数最小,接着记下最小数所在的位置,然后将最小数依次与后面的
每一个数都进行比较,若比较时发现后面的数比最小的数还小,则修改最小数所在位置,全
部都比较完算一轮,每一轮比较完后,最小数所在的位置是否跟假设的是同一个位置,若不
是,则最小数与第一个数进行交换位置,如此进行即可完成选择排序。
算法:
Fori=1ton-1‘i表示比较轮数
P=i‘假设第i个数最小,并记下最小数所在位置
Forj=i+1t0n‘J表示每轮比较次数
Ifa(p)>a(j)thenp=j‘发现有更小的数,则修改最小数P的位置
Nextj
Ifpithent=a(i):a(i)=a(p):a(p)=t‘如果假设不成立,则两'数位置进行交换
Nexti
三、选择排序
Dima()AsInteger,nAsInteger
PrivateSubCommand1_Click()'随机产生20个互不相同的两位正整数
n=10
ReDima(1Ton)AsInteger
Fori=1Ton
a(i)=Int(Rnd*90)+10
f=false'假设第i个数与前面已生成的数中没有相同的
Fork=1Toi-1
Ifa(i)=a(k)Then'如果第i个数与前面的数有相同
i=i-1'第i个数重新产生
f=true'已经找到与前面有相同的数
ExitFor'不再寻找,直接退出内嵌的循环
EndIf
Nextk
Iff=ma(i)'把产生的两位数放入list1列表框中
Nexti
EndSub
PrivateSubCommand2_Click()
Rem选择排序法,从大到小
Fori=1Ton-1
p=i
Forj=i+1Ton
Ifa(p)
Nextj
IfpiThent=a(p):a(p)=a(i):a(i)=t
Nexti
Rem把排序好的10个放入list2列表框中
Fori=1To10
ma(i)
Nexti
EndSub
例题:随机产生20个互不相同的两位正整数放入list1列表框中,用选择法将这20个数按
从大到小的顺序在list2列表框中输出。