数组常见算法
一、排序
1、顺序比较法
习题1:随机产生8个数,按从小到大的顺序排序
Dim a(8) as integer
Private sub command1_click()
For i=1 to n
A(i)=int(rnd*12+20)
Next I
For i=1 to ubound(a)-1
For j=i+1 to ubound(a)
  If a(i)>a(j ) then c=a(i):a(i)=a(j):a(j)=c
Next j
Next I
For i=1 to ubound(a)
Print a(i);
Next I
End sub
习题2:要求使用随机数,给一个含10个元素的数组赋值,值的大小在50到100之间,赋值后显示组数各元素;然后从小到大排序,排序后,再次用Print方法显示组数各元素。
如 :排序前:5 6 7 1 3 2 4 8 9 0
排序后:0 1 2 3 4 5 6 7 8 9
Private Sub Form_Click()
Const N = 10
Dim a(1 To N) As Integer, i%, j%, k%, t%
Randomize
Print "排序前:";
For i = 1 To N
a(i) = Int(Rnd * 51) + 50
Print a(i);
Next i
For i = 1 To N - 1
k = i
For j = i + 1 To N
If a(j) < a(k) Then k = j
Next j
t = a(i): a(i) = a(k): a(k) = t
Next i
Print
Print "排序后:";
For i = 1 To N
Print a(i);
Next i
Print
End Sub
2、冒泡法
例题1:随机产生8个数,按从小到大的顺序排序
Dim a(8) as integer
Private sub command1_click()
For i=1 to n
A(i)=int(rnd*12+20)
Next I
  For i=ubound(a)-1 to 1 step -1
    For j=1 to i
      If a(j)>a(j+1) then c=a(j):a(j)=a(j+1):a(j+1)=c
      Next j
Next I
For i=1 to ubound(a)
Print a(i);
Next I
End sub
习题1:
程序运行后,利用冒泡法对数组a中的数据按从小到大排序,请在空白处填上适当的内容,将程序补充完整。
Private sub form_load()
Dim a(1 to 5) as integer
A(1)=20:a(2)=25:a(3)=10:a(4)=40:a(5)=15
N=5
________________
For z=1 to n-m
If a(z)>a(a+1) then
T=a(z):a(z)=a(z+1):a(z+1)=t
End if
Next z
Next m
End sub
习题2:
下面的程序用"冒泡"法将数组a中的10个整数按升序排列,请将程序补充完整。
Option Base 1
Private Sub Command1_Click()
Dim a
A=Array(678,45,324,528,439,387,87,875,273,823)
For i=        
For j=       
If a(i)        a(i+1) Then
t=a(i)
a(i)=a(i+1)
a(i+1)=t
End If
Next j
Next i
For i=1 To 10
Print a(i)
Next i
End Sub
二、利用数组进行数据的移动及插入
习题1:在一个已按升序排好的数组(10个元素)中插入一个从键盘上输入的数,使序列仍保持升序。
DIM A(11)
X=VAL(INPUTBOX(“”))
FOR I=1 TO 10
IF X<A(I) THEN
  FOR J=10 TO I STEP -1
      A(J+1)=A(J)
    NEXT J
    A(I)=X
    EXIT FOR
ENDIF
IF X>A(10) THEN A(11)=X
NEXT I
习题2:
 下面程序的功能是一个一维数组中的元素循环向右移动,每次移位次数由文本框text中的输入决定。例如,数组中各元素的值依次为0,1,2,3,4,5,6,7,8,9,10;移动3次后,各元素的值依次为8,9,10,0,1,2,3,4,5,6,7.请程序补充完整。
Private sub moveright(x() as  integer)
Dim I as integer,j as integer,k as integer
I=ubound(x)
J=x(i)
For k=I to _____ step -1
____________________
Next k
X(lbound(x))=j
End sub 
Private sub command1_click()
Dim a(10) as integer
Dim I as integer, j as integer, k as integer
For i=0 to 10
A(i)=i
Next i
J=)
K=0
Do
  K=k+1
Call moveright(a)
Loop Until k=j
For i=0 to 10
Print a(i);
Next I数组全部赋值为1
End sub
三、利用数组进行数据交换 
习题1:设有一个有10个元素的数组,下列程序将该数组的第1个元素与第10个元素交换,第2个元素与第9个元素交换…….第5个元素与第6个元素交换,请填空。
Private sub command1_click()
Dim a(1 to 10) as integer
Dim I as integer,p as integer,t as integer,j as integer
For i=1 to 10
A(i)=i
Next I
For j=1 to 5
T=a(j)
___________
____________
Next j
For i=1 to 10
Print a(i)
Next I
End sub
习题2:在窗体上画一个名称为Command1的命令按钮,然后编写如下程序:
Option Base l
Private Sub Colilinand1_Click()
Dim a(10)As Integer
For i=l TO 10
a(i)=i
Next
call Swap(          )
For I=l T0 10
Print a(i);
Next
End Sub
Sub Swap(b()As Integer)
n=       
For i=l TO n/2
t=b(i)
b(i)=b(n)
b(n)=t
       
Next
End Sub
上述程序的功能是,通过调用过程Swap,调换数组中数值的存放位置,即a(1)与a(10)的值互换,a(2)与a(9)的值互换,……,a(5)与a(6)的值互换。请填空。
练习1:将一个3行4列的矩阵的第1列和第4列互换,第2列和第3列互换。
DIM A(3,4)
FOR I=1 TO 3
    FOR J=1 TO 4
A(I,J)=VAL(INPUTBOX(“”))
  NEXT J
NEXT I
FOR I=1 TO 3
  FOR J=1 TO 2
T=A(I,J)
A(I,J)=A(I,5-J)
A(I,5-J)=T
  NEXT J
NEXT I
练习2:设有一个4*4的矩阵,求出两个对角线元素之和(注:矩阵中的每个数据元素是其行号和列号的乘积)。
Dim a(4, 4) As Integer
For i = 1 To 4
For j = 1 To 4
    a(i, j) = i * j
  Next j
Next i
For i = 1 To 4
  For j = 1 To 4
    If i = j Or i + j = 5 Then
      s = s + a(i, j)
    End If
  Next j
Next i
Print s
四、求极值
 
三种方法:
例如:随机产生20个[1,200]区间内整数,并出其中的最大值和最小值
相同的程序段
Dim a%(20)
For i=1 to 20
A(i)=int(200*rnd()+1)
Print a(i)
Next I
方法1:
Max =a(1):min=a(1)
For i=2 to 20
If max<a(I ) then max=a(i)
If min>a(i) then min=a(i)
Next i
方法2:
Max=1:min=200
For i=1 to 20
If max<a(i) then max=a(i)
If min>a(I) then min=a(i)
Next I
方法3:
For i=1 to 20
If a(1)<a(i) then c=a(1):a(1)=a(i):a(i)=c
If a(20)>a(i) then c=a(20):a(20)=a(i):a(i)=c
Next I
Max=a(1):min=a(20)
习题:
 1、 以下程序的功能是:用array函数建立一个含有8个元素的数组,然后查并输出该数组中元素的最大值,请填空。
Option base 1
Private sub command1_click()
Dim arr1,max as integer
Arr1=array(12,435,76,24,78,54,866,43)
_____=arr1(1)
For i=1 to 8
If arr1(i)>max then __________
Next I
Print 最大值是:;max
End sub
2、下面程序的功能是出10个数中的最大值,并输出这个数以及它在10个数中所处的位置,请在空白处填入适当内容,将程序补充完整。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。