VB教程——排序算法复习
- 格式:ppt
- 大小:406.50 KB
- 文档页数:23
VB常用算法总结大全VB(Visual Basic)是一种对初学者友好的编程语言,因其简单易学的特点而受到很多人的喜爱。
在VB中,算法是编程过程中非常重要的一部分,它们用来解决各种问题,从简单的数学计算到复杂的数据处理。
本文将总结一些常用的算法,帮助VB程序员更好地应用于实际项目中。
一、排序算法1.冒泡排序冒泡排序是一种简单的排序算法,它通过不断地交换相邻的元素来对数据进行排序。
它的基本思想是从列表的第一个元素开始,依次比较相邻的两个元素,如果顺序不正确,则交换它们的位置。
重复这个过程,直到整个列表都已经排序。
2.快速排序快速排序是一种高效的排序算法,它通过选择一个基准元素,将列表分为两部分,一部分小于基准元素,一部分大于基准元素。
然后对这两部分分别进行快速排序,最后将它们合并在一起。
3.插入排序插入排序是一种简单直观的排序算法,它将列表分为已排序和未排序两部分,每次选择未排序部分的第一个元素,并插入到已排序部分的适当位置。
重复这个过程,直到整个列表都已经排序。
二、查找算法1.顺序查找顺序查找是一种简单的查找算法,它从列表的第一个元素开始,依次比较每个元素,直到找到目标元素或者遍历完整个列表。
2.二分查找二分查找是一种高效的查找算法,它要求列表已经排序。
它通过比较目标元素与列表中间元素的大小关系来确定要的部分,并缩小范围。
重复这个过程,直到找到目标元素或者确定列表中没有目标元素。
三、图算法1.深度优先(DFS)深度优先是一种用于图遍历的算法,它从一个起始点开始,沿着一个路径尽可能深地访问节点,直到遇到一个没有未访问过的相邻节点为止。
然后回溯到前一个节点,寻找其他路径。
2.广度优先(BFS)广度优先也是一种用于图遍历的算法,它从一个起始点开始,依次访问所有与起始点相邻的节点,然后再依次访问这些节点的相邻节点,直到遍历完图中的所有节点。
四、动态规划动态规划是一种解决多阶段决策问题的方法,它将问题分解为若干个阶段,并定义状态和决策。
VB 冒泡排序专题班级 姓名知识点回顾:1、冒泡排序的特征:从后往前两两比较数据,不符合大小关系的两数交换至达到要求。
2、关于冒泡需理解:※升序:将后数小于前数的两个数进行交换;降序:将后数大于前数的两数进行交换;※N 个数最多进行N-1遍排序;两数比较的次数最多为N*(N-1)/2;两数交换次数最多为:N*(N-1)/2; ※冒泡有很多改进算法,在练习中要加强理解和记录;3、冒泡经典代码:( 以降序为例 )冒泡经典算法默认数据从后往前冒,第一次比较的两个数一定是a(n)与a(n-1),一定是先把最值放a(1)中; 而事实上冒泡也可以从前往后冒,第一次比较的两个数一定是a(1)与a(2),一定是先把最值放在a(n)中。
4、字符串的排序:可以排序,按照字符的ASCII 码。
从第一个字符开始比较,直到比出大小,即当字符串第一个字符一样时,按照第二个字母的ASCII 码排,以此类推。
例: “bcd ”大于“adb ”,“efad ”小于“efcd ”。
巩固练习:1、在运动会上,男生第一组6位选手的百米成绩(单位:秒)分别是“13.4、12.3、11.2、13.8、13.1、11.0”,若使用冒泡排序法将该组的成绩按第一名、第二名、第三名……的顺序排序,则第一遍排序后的顺序是();两遍排序后的顺序是( );A. 11.0 11.2 13.8 13.4 12.3 13.1B.11.0 12.3 11.2 13.8 13.1 13.4C. 11.0 11.2 13.4 12.3 13.1 13.8D.11.0 13.4 12.3 11.2 13.8 13.12、有一组10个数据的无序序列,利用冒泡排序算法进行从小到大的排序,需要比较的次数和最多交换的次数,最多需要进行加工的遍数分别为()A. 9,45,9B. 45,15,9C.45,45,9D.15,45,83、在NBA某赛季中,快船队5场比赛得分依次为97,89,111,70,90,若采用冒泡排序算法对其进行从小到大排序,在整个排序过程中,数据97被交换的次数是( )A.1次 B.2次 C.3次 D.4次4、对存储在stu ( 0 to n )中的n+1个元素用冒泡排序算法进行排序,元素交换次数的范围和元素比较次数的值分别为()A、[0,n],(n-1)*n/2B、[1,(n+1)*n/2],(n-1)*n/2C、[0,(n+1)*n/2],(n+1)*n/2D、[1,n-1],(n+1)*n/25、下列关于排序的算法,不正确的是()A.对 N 个数组元素进行排序,冒泡排序和选择排序排序的遍数一样B.对 N 个数组元素进行排序,冒泡排序和选择排序比较的次数一样C.对 N 个数组元素进行排序,冒泡排序和选择排序在排序过程中交换次数一样D.一般情况下,选择排序比冒泡排序效率更高6、有如下程序段:For i=7 to 5 step -1For j=7 to 9-i step -1If a(j)>a(j-1) thenk=a(j):a(j)=a(j-1):a(j-1)=kEnd ifNext jNext i数组元素a(1)到a(7)的数据依次为3,9,1,5,8,6,2 经过该程序段加工后,a(1)到a(3)排列为( ) A.1 2 3 B. 9 8 6 C. 3 9 1 D. 8 6 57、有如下VB程序段,已知数组a中有10个元素,保存的数据分别为:56、21、18、64、72、49、3、7、22、80,则程序运行后变量m的值为○1m=0:i=1Do while i<=10if m<a(i) then m=a(i)i=i+1Loop8、以下程序段的功能是找到a(0).....中最小值...并显示在label1上,请填空:....到.a(99)m=a(0)For i=1 to 99if ○1 then m=a(i)next i○29、以下程序段的功能是找到a(1)到a(10)中最大值存储在a(10).....中并打印在界面上,请填空:for i=1 to ○1if a(i)>a(i+1) then t=a(i):a(i)=a(i+1):a(i+1)=tNext iprint ○210、数组a(1 to 10) 中保存的数据依次分别为:80、7、56、21、18、64、72、49、38、22,则程序运行后变量m 的值为○1 j 的值为○2 text1.text 中显示的内容为○3 。
VB选择排序专题班级姓名知识点回顾:1、数组的作用:一组意义相同,类型相同的数据的保存,通常借助于数组。
如:高二年级所有同学的学籍号可定义为大小为700(只能多不能少)的long类型的数组xjh1 to 700) 或xjh(699);2、数组名称可自取: 符合※以字母开头、※除了“_”外不能有其他字符、※不能用VB已用的关键字即可;3、数组下标的定义可以从任何数开始,但通常为0或1,如:a(19),表示下标从0开始到19;a(1 to 19)表示下标从1开始。
下标即位置,能代表数组值。
4、数组赋初值方法多样,通常用循环语句。
没有赋值默认数组中每个数初值为0或FALSE或“”。
5、排序概念和意义:把一组类型相同的数据按照升序或者降序的规律排列起来。
6、排序的算法要点:※将N个数据保存在数组中;※理清是升序或是降序排序——升序为从小到大,降序为从大到小;※算法很多——冒泡排序、选择排序、插入排序、希尔排序、快速排序等……7、选择排序的特征:以降序为例——第一遍排序,找出最大值的位置,与数组中第一个数交换,第二遍排序,找出次大值的位置,与数组中第二个数交换。
8、关于选择排序需理解:※N个数最多进行N-1遍排序;两数比较的次数最多为N*(N-1)/2;两数交换次数最多为:N-1次;※选择排序的变式即改进算法非常多,比如N个数据排序时,发现某一遍排序两两比较过程中已没有数据交换则可以停止继续排序,比如比较过程中直接交换等,在练习中要加强理解和记录;9、选择排序的经典代码:( 以降序为例,所有for语句都要熟练转化为do while语句)巩固练习:1、在VB中,如果变量p用来存储某张试卷上的缺考填涂标记,则p应采用的最适合的数据类型是()A.Integer B.Boolean C.Single D.String2、VB语句“Dim a(50) As String”定义的数组元素个数以及第8个数组元素分别为();VB语句“Dim a(1 to 50) As long”定义的数组元素个数以及第8个数组元素分别为()A. 51,a(7)B.50,a(7)C. 51,a(8)D.50,a(8)3、有如下Visual Basic程序段:m = a(2)For j = 3 To 50If a(j) > m Then m = a(j)Next jMsgbox(str(m))该程序段执行后,变量m中存储的是()A、a(1)至a(50)中的最小值B、a(2)至a(50)中的最大值C、a(2)至a(50)中的最小值的位置D、a(1)至a(50)中的最大值的位置4、以下程序执行后,i的值是()Dim a(1 To 5) As IntegerDim f As Booleana(1) = 23: a(2) = 12: a(3) = 56: a(4) = 34: a(5) = 10i = 1: f = TrueDo While i <= 5 And f = TrueIf a(i) = 56 Then f = Falsei = i + 1LoopLabel1.Caption = iA.6 B.3 C.4 D.55、在2017年秋季学校运动会上,男生第一组6位选手的百米成绩(单位:秒)分别是“13.4、12.3、11.2、13.8、13.1、11.0”,若使用选择排序法将该组的成绩按第一名、第二名、第三名……的顺序排序,则第一遍排序后的顺序是();两遍排序后的顺序是();A. 11.0 11.2 12.3 13.8 13.1 13.4B.11.0 12.3 11.2 13.8 13.1 13.4C. 11.0 11.2 13.4 12.3 13.1 13.8D.11.0 13.4 12.3 11.2 13.8 13.16、有一组10个数据的无序序列,利用选择排序算法进行从小到大的排序,需要比较的次数和最多需要进行加工的遍数,以及最多交换数组数据的次数分别为()A. 9,9,9B.15,9,8C.45,9,9D.45,8,87、在NBA某赛季中,快船队5场比赛得分依次为97,89,111,70,90,若采用选择排序算法对其进行从小到大排序,在整个排序过程中,数据97被交换的次数是( )A.1 B.2 C.3 D.48、用选择排序算法对一组学生的身高数据进行升序排序,已知第一遍排序结束后的数据序列为165,168,178,175,171,则下列选项中可能是原始数据序列的是()A、175,178,168,165,171B、178,168,165,175,171C、165,178,168,175,171D、165,168,171,175,1789、对存储在stu ( 0 to n )中的n+1个元素用选择排序算法进行排序,元素交换次数的范围和元素比较次数的值分别为()A、[0,n],(n-1)*n/2B、[1,n-1],(n-1)*n/2C、[0,n],(n+1)*n/2D、[1,n-1],(n+1)*n/210、以下是选择排序主要部分,其中线框内代码用于寻找d(a)到d(n)的最小值的下标(即通常所说的位置)。
VB常用算法大全在VB中实现常用算法是程序开发中非常常见的任务之一、下面将介绍几个常用的算法以及它们在VB中的实现方式。
1.冒泡排序算法:冒泡排序是一种简单直观的排序算法,它通过交换相邻元素来排序。
具体实现如下:```vbSub BubbleSort(arr( As Integer)Dim i As Integer, j As IntegerDim temp As IntegerFor i = LBound(arr) To UBound(arr) - 1For j = i + 1 To UBound(arr)If arr(j) < arr(i) Thentemp = arr(j)arr(j) = arr(i)arr(i) = tempEnd IfNext jNext iEnd Sub```2.快速排序算法:快速排序是一种高效的排序算法,它通过选择一个基准元素并将数组分为两部分来排序。
具体实现如下:```vbSub QuickSort(arr( As Integer, low As Integer, high As Integer)Dim i As Integer, j As IntegerDim pivot As Integer, temp As Integeri = lowj = highpivot = arr((low + high) / 2)While i <= jWhile arr(i) < pivoti=i+1WendWhile arr(j) > pivotj=j-1WendIf i <= j Thentemp = arr(i)arr(i) = arr(j)arr(j) = tempi=i+1j=j-1End IfWendIf low < j Then QuickSort arr, low, j End IfIf i < high Then QuickSort arr, i, high End IfEnd Sub```3.查找算法之二分查找:二分查找算法是一种在有序数组中查找指定元素的算法。
VB常用算法总结VB是一种基于Visual Basic语言的编程语言,广泛应用于Windows 操作系统环境下的软件开发。
在VB中,算法的选择和使用对于解决问题是至关重要的。
本文将对VB常用算法进行总结,希望能给读者提供一些编程的指导和参考。
一、排序算法排序算法是一类重要的算法,用于将一组无序的数据按照一定的规则进行排序。
VB中常用的排序算法有冒泡排序、选择排序、插入排序、快速排序等。
1.冒泡排序:从序列的第一个元素开始,依次比较相邻的两个元素,如果它们的顺序错误则交换位置,直到序列被完全排序。
2.选择排序:依次选择未排序序列中的最小元素,将其放到已排序序列的末尾。
3.插入排序:将一个记录插入到已排序好的序列中,从而得到一个新的、记录数增1的有序序列。
4.快速排序:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,然后分别对这两部分记录继续进行排序,直到整个序列有序。
二、查找算法查找算法用于在一组有序或无序的数据中寻找指定的元素。
VB中常用的查找算法有线性查找、二分查找、哈希查找等。
1.线性查找:从数据的开头开始,逐个比较每一个元素,直到找到目标元素。
2.二分查找:在有序序列中,每次将待查元素与中间位置的元素比较,如果相等则找到,否则将待查元素与中间位置的元素比较,直到找到目标元素或序列为空。
3.哈希查找:通过哈希函数将关键字映射到一个定长的数组上,当需要查找时,根据关键字计算出哈希地址,从数组中访问对应位置的元素。
三、图算法图算法主要用于解决图结构相关的问题,如最短路径、拓扑排序等。
VB中常用的图算法有深度优先、广度优先、Dijkstra算法等。
1.深度优先:从起始节点开始,递归地访问子节点,直到无法继续访问为止,然后回溯到上一级节点,继续访问其尚未被访问的子节点。
2.广度优先:从起始节点开始,依次访问其所有相邻节点,直到访问到目标节点为止。
3. Dijkstra算法:求解带权有向图中单源最短路径问题,通过使用一个优先队列来实现。
VB_常用算法总结VB是一种使用广泛的编程语言,它有很多常用的算法可以应用到各种实际的问题中。
下面是一些常用的VB算法的总结。
1.排序算法:-冒泡排序:比较相邻的两个元素,如果顺序错误则交换位置,重复该过程直到排序完成。
-插入排序:将一个元素插入到已经排好序的数组中的正确位置。
-选择排序:每次选择数组中最小的元素,放到已排序部分的末尾。
-快速排序:选择一个元素作为基准,将小于它的元素放在它的左边,大于它的元素放在右边,分别对左右两部分进行递归排序。
2.查找算法:-二分查找:将有序数组从中间切分,判断目标元素与中间元素的大小关系,递归查找目标元素所在的半边数组。
-线性查找:逐个比较数组中的元素,直到找到目标元素或遍历完整个数组。
3.图算法:-深度优先(DFS):从起始节点开始,递归地探索图中的每个节点,直到遍历到最深的节点为止。
-广度优先(BFS):从起始节点开始,逐层地探索图中的节点,直到找到目标节点。
- 最短路径(Dijkstra算法):计算从起始节点到所有其他节点的最短路径。
4.动态规划:-背包问题:给定一组物品和一个背包的容量,选择一些物品放入背包中,使得物品的总价值最大。
-最长公共子序列(LCS):两个序列中的最长公共子序列,可以用动态规划的方法求解。
5.图像处理:-图像平滑:使用滤波器(如均值滤波器、高斯滤波器)对图像进行平滑处理,去除图像中的噪声。
- 边缘检测:使用边缘检测算法(如Canny算法、Sobel算法)从图像中检测出物体的边缘。
6.数据压缩:-霍夫曼编码:根据字符出现的频率,构建霍夫曼树,并生成每个字符的编码,实现数据的无损压缩。
- Run-length编码:对连续出现的相同字符进行计数,并将计数值和字符编码压缩存储。
7.数学计算:-求解方程:使用牛顿迭代法、二分法等方法,寻找方程的根。
-矩阵操作:实现矩阵的相加、相乘、转置等操作。
以上只是VB中的一部分常用算法,还有很多其他的算法可以应用到实际问题中。
在VB中,经常需要对大量的数据进行排序,比如对于班级学生考试成绩需要由高到低进行排序。
在VB中没有专门的排序方法,因此需要使用一定的方法来实现排序。
本节课程我们就一起来学习VB中对数组元素进行排序的方法。
最为重要的两种排序方法为:选择排序法和冒泡排序法。
选择排序法以从大到小排序为例,选择排序法是指每次选择所要排序的数组中最大值的数组元素,将这个数组元素的值与前面的数组元素的值互换。
经过有序步骤后,即可实现数组元素的由大至小的排序。
以一个{10,20,30,40,50}的数组为例,其采用选择排序法的过程如下图所示:代码如下:Private Sub Command2_Click()Dim A()Dim i%, j%Dim max%A = Array(10, 20, 30, 40, 50)Print"原始数组" & A(1) & "," & A(2) & "," & A(3) & _"," & A(4) & "," & A(5)For i = 1 To 4For j = 1 To 5 - iIf A(j + 1) > A(j) Thenmax = A(j + 1)A(j + 1) = A(j)A(j) =maxEnd IfNext jPrint"第" & i & 步:" & A(1) & "," & A(2) & "," & A(3) & _"," & A(4) & "," & A(5)Next iEnd Sub冒泡排序法仍然以从大到小排序为例,冒泡排序法是指在排序时,每次比较数组中相邻的两个数组元素的值,并将较大的排在较小的前面。
1.求因子数Private Sub factor(X As Integer, Fn() As Integer) Dim I As Integer, N As IntegerReDim Fn(1): N = 1: Fn(1) = 1For I = 2 To N / 2If X Mod I = 0 ThenN = N + 1ReDim Preserve Fn(N)Fn(N) = IEnd IfNextEnd Sub2. 求因子数之和Private Function Sum_factor(N As Integer) As Long Dim I As Integer, J As Integer, S As IntegerDo While I < N / 2I = I + 1If N Mod I = 0 ThenS = S + IEnd IfLoopSum_factor = SEnd Function3. 判断数是否为素数Private Function Prime(N As Integer) As Boolean Dim M As IntegerFor M = 2 To Sqr(N)If N Mod M = 0 Then Exit FunctionNextPrime = TrueEnd Function4.求最大公约数Private Function gcd(m As Integer, n As Integer) As Integer If m Mod n = 0 Thengcd = nElsegcd = gcd(n, m Mod n)End IfEnd Function5.求最小公倍数Private Function Lcm(A As Integer, B As Integer) As Long DoLcm = Lcm + AIf Lcm Mod A = 0 And lcm Mod B = 0 ThenExit DoEnd IfLoopEnd Function6.求分数约数Private Sub divisor (Fz As Long, Fm As Long)Dim Min As Integer, K As IntegerIf Fm < Fz Then Min = Fz Else Min = FmFor K = 2 To MinDo While Fz Mod K = 0 And Fm Mod K = 0Fz = Fz / KFm = Fm / KLoopNextEnd Sub7.求阶乘Private Function fact(N As Integer) As Long If N <= 1 Thenfact = 1Elsefact = N * fact(N - 1)End IfEnd Function或Private Function fact(N As Integer) As Long Dim i As Integerfact = 1For i = 1 To Nfact = fact * iNextEnd Function8.一维数组排序(1)选择法排序,结果是从小到大Private Sub choose(a() As Integer)Dim I As Integer, J As Integer, Temp As Integer For I = 1 To UBound(a) - 1For J = I + 1 To UBound(a)If a(I) > a(J) ThenTemp = a(I)a(I) = a(J)a(J) = TempEnd IfNext JNext IEnd Sub(2)冒泡法排序,结果是从小到大Private Sub bubble_up(a() As Integer) Dim I As Integer, J As IntegerDim temp As DoubleDim m As IntegerFor I = LBound(a) To UBound(a) - 1 For J = UBound(a) To I + 1 Step -1If a(J) < a(J - 1) Thentemp = a(J)a(J) = a(J - 1)a(J - 1) = tempEnd IfNext JNext IEnd Sub注:把程序中“>”改成“<”,排序的结果为从大到小。
VB常考算法(八)排序:1、算法1)选择法排序算法说明:根据上例中求最小值的思路,我们可以使用如下方法进行从小到大排序:第一轮,以第一个元素逐个跟后面的所有元素比较,如果比后面的元素大就进行交换,经过一轮比较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进行比较确定下次小的元素;以此类推…下面我们以图形的形式体现对5个数进行选择排序的过程:第一轮:第二轮:第三轮:从上图可以发现对5个元素进行排序,总共经过了5-1=4轮,而每一轮中比较的次数也不相同,第一轮2、3、4、5号元素参与跟1号元素的比较,共4次,第二轮3、4、5号元素参与跟2号元素的比较,共3次,以次类推,比较次数逐步减少。
经过四轮的比较,利用逐步求最小值的方法将5个数从小到大排好序。
对于这样一个排序的过程,我们可以使用两个循环分别控制比较的轮数和每一轮的次数。
程序代码:Private Sub Command1_Click()Dim n As Integern = InputBox("请输入数组元素的个数:")Dim a() As Integer, i As Integer, j As IntegerPrint "排序前:"ReDim a(n)For i = 1 To na(i) = Int(Rnd * (99 - 10 + 1) + 10)Print a(i);最小值次小值Next iFor i = 1 To n - 1For j = i To nIf a(i) > a(j) Thentemp = a(i) '交换元素a(i) = a(j)a(j) = tempEnd IfNext jNext iPrintPrint "排序后:"For i = 1 To nPrint a(i);Next iEnd Sub2)冒泡法排序算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大,则将它们进行交换,具体思路:设在数组a 中存放n 个元素,第一轮,将a(1)和a(2)进行比较,若a(1)>a(2),则交换这两个元素的值,然后继续用a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了n 个数中最大的值;第二轮,用a(1)与a(2),a(2)与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一轮下来,a(n-1)中存放n 个数中第二大的值;…;第n-1轮,a(1)与a(2)进行比较处理,确保最小值在a(1)中。
VB常用算法----排序1、选择法排序(1) 利用循环从n个数中选出最小数的下标,结束循环后,将最小数与第一个数交换位置;(2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;(3) 以此类推,最后构成递增序列。
譬如:8 6 9 3 2 7第一轮交换后 2 6 9 3 8 7第二轮交换后 2 3 9 6 8 7第三轮交换后 2 3 6 9 8 7第四轮交换后 2 3 6 7 8 9第五轮无交换 2 3 6 7 8 9程序代码如下:Private Sub xzPaiXu(a() As Double, sheng As Boolean)'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。
Dim i As Integer, j As IntegerDim temp As DoubleDim m As IntegerFor i = LBound(a) To UBound(a) - 1 '进行数组大小-1轮比较m = i '在第i轮比较时,假定第'i个元素为最值元素For j = i + 1 To UBound(a) '在剩下的元素中找出最'值元素的下标并记录在m中If sheng Then '若为升序,则m记录最小元素'下标,否则记录最大元素下标If a(j) < a(m) Then m = jElseIf a(j) > a(m) Then m = jEnd IfNext j '将最值元素与第i个元素交换temp = a(i)a(i) = a(m)a(m) = tempNext iEnd Sub调用该过程示例:Option Base 1Private Sub Command1_Click()Dim b(6) As Doubleb(1) = 8b(2) = 6b(3) = 9b(4) = 3b(5) = 2b(6) = 7Call xzPaiXu(b, True)For i% = 1 To 6Print b(i)NextEnd Sub2、冒泡法排序选择排序法在每一轮排序时寻找最值元素的下标,出了内循环(一轮排序结束时,确定最值下标),再交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对时就立即..交换..位置,出了内循环,最值数已经冒出。
1、算法说明1) 顺序查找逐个元素找,如果有,则记录位置,然后跳出循环;否则,查找失败。
代码如下:Private Sub Search(a(), ByVal Key, Index As Integer)Dim i%For i = LBound(a) To UBound(a)If a(i) = Key Then '找到,将元素下标保存在index中并结束查找Index = iExit SubEnd IfNext iIndex = -1 '若没找到,则index值为-1End Sub2) ⼆分法查找顺序查找效率低下,当数组有序排列时,可以使⽤⼆分法查找提⾼效率。
算法思想:代码如下:Private Sub birSearch(a(), ByVal low%, ByVal high%, ByVal Key, index%) Dim mid As IntegerIf low > high Then '没有查找到index = -1Exit SubEnd Ifmid = (low + high) \ 2 '取查找区间的中点If Key = a(mid) Then '查找到,返回下标index = midExit SubElseIf Key < a(mid) Then '查找区间在上半部分high = mid - 1Elselow = mid + 1 '查找区间在下半部分End IfCall birSearch(a, low, high, Key, index) '递归调⽤查找函数End Sub调⽤⽅法:Private Sub Command1_Click()Dim a(11)a(1) = 5: a(2) = 13: a(3) = 19: a(4) = 21: a(5) = 37a(6) = 56: a(7) = 64: a(8) = 75: a(9) = 80: a(10) = 88: a(11) = 92Dim ind As IntegerCall birSearch(a, LBound(a), UBound(a), 21, ind)Print indEnd Sub。