vb 如何判断数组是否相似

来源:百度知道 编辑:UC知道 时间:2024/06/06 10:47:13
假设有 数组a 和 数组b
a(0)= 1 b(0)= 10
a(1)= 2 b(1)= 9
a(2)= 3 b(2)= 8
a(3)= 4 b(3)= 7
a(4)= 5 b(4)= 6
a(5)= 6 b(5)= 5
a(6)= 7 b(6)= 4
a(7)= 8 b(7)= 3

顺序是乱的。随机生成的。
如可判读 a b两数组的值 有一半以上是相同的。
数组大小 都在3000以上的 逐个循环判断不实际。数组大小 都在3000以上的 如果逐个循环判断不实际。

指点一二。或者给个思路。thanks。
===================
回复:瞧红尘 输出的6就是重复的对应数量吧?
有2个疑问
1.我将数组设置成3000 提示越界。设置成8 也提示越界
2.只改动数组的值 比如将a(3)改成3571 提示越界

2个数组的值是5位数以上的LONG哦。每个数组至少有1000~3000个值日。
你那个程序 貌似 只能处理顺序赋值的 数组呢。
=================
回复 小fisher 你那个QuickSort1D 怎么调用?
Call QuickSort1D(a(999999))??

先用快速排序法将其中一个排序,再用折半查找法在排序后的数组中依次查找另一个数组中的各个元素,应该只能优化到这样了。

1维数组快速排序算法如下:

Sub QuickSort1D(asArray() As Integer, Optional bSortAscending As Boolean = True, Optional iLow1, Optional iHigh1)

'变量定义
Dim iLow2 As Long, iHigh2 As Long
Dim sKey As Integer
Dim sSwap As Integer

On Error GoTo PtrExit

'如果未给出上下限参数,则排序整个数组
If IsMissing(iLow1) Then iLow1 = LBound(asArray)
If IsMissing(iHigh1) Then iHigh1 = UBound(asArray)

'将将原来的上下限位置值赋给新的上下限位置
iLow2 = iLow1
iHigh2 = iHigh1

'取得上下限之间中间元素的数值
sKey = asArray((iLow1 + iHigh1) \ 2)

'循环遍历上下限之间所有的数组元素
Do While iLow2 < iHigh2

If bSortAscending Then '如果升序排列
'找到第一个大于中间值的元素
Do While asArray(iLow2) < sKey And iLow2 < iHigh1
iLow2 = iLow2 + 1
Loop

'Find the last item that is less th