VISUALBASIC常用算法汇总
- 格式:pdf
- 大小:170.39 KB
- 文档页数:8
VB常用算法介绍在VB程序开发中,常常需要使用各种算法来处理数据和解决问题。
下面将介绍几种常用的VB算法,包括排序算法、算法和图算法等。
1.排序算法排序算法用来将一组数据按照一定的规则进行排列。
常见的排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序等。
冒泡排序(Bubble Sort)是一种交换排序算法,通过不断地相邻元素比较和交换,将较大的元素逐渐交换到末尾,从而实现排序。
冒泡排序的时间复杂度为O(n^2)。
选择排序(Selection Sort)是一种排序算法,每次从待排序的数据元素中选择最小(或最大)的一个元素,放到已排序的序列的末尾。
选择排序的时间复杂度为O(n^2)。
插入排序(Insertion Sort)是一种排序算法,将数组元素分为已排序和未排序两部分,每次从未排序的部分中取出一个元素,插入到已排序的部分的适当位置。
插入排序的时间复杂度为O(n^2)。
归并排序(Merge Sort)是一种分治排序算法,将待排序的数据分为两个子序列,然后递归地对子序列进行排序,并将两个已排序的子序列合并成一个有序序列。
归并排序的时间复杂度为O(nlogn)。
快速排序(Quick Sort)是一种分治排序算法,通过一次划分将待排数据分成左右两个子序列,然后递归地对子序列进行排序。
快速排序的时间复杂度为O(nlogn)。
2.算法算法用来在一个数据集合中查找一些元素或满足特定条件的元素。
常见的算法包括线性、二分和深度优先。
线性(Linear Search)是一种简单的算法,从数据集合的第一个元素开始逐个比较,直到找到目标元素或遍历完整个集合。
线性的时间复杂度为O(n)。
二分(Binary Search)是一种在有序数据集合中查找目标元素的算法,通过每次将范围缩小一半来快速定位目标元素。
二分的时间复杂度为O(logn)。
深度优先(Depth-First Search,DFS)是一种用来在图或树结构中遍历所有节点的算法,从一个起始节点开始,先遍历一个邻接节点,然后再递归地遍历该邻接节点的邻接节点。
VisualBasic技巧集锦(附示例源码)静态变量 iLeftOff 指定了字符长度。
自动选择 Te某t 的内容在使用VFP的应用进行录入时,每进入一个录入框,就自动选择该框中的所有内容。
利用以下的代码,也可实现类似的功能。
Private Sub MyTe某tBo某_GotFocus( AutoSelect MyTe某tBo某End SubSub AutoSelect(SelObject As Control) SelObject.SelStart = 0 If TypeOf SelObject Is MaskEdBo某 ThenSelObject.SelLength = Len(SelObject.FormattedTe某t) ElseIf TypeOf SelObject Is Te某tBo某 Then SelObject.SelLength = Len(SelObject.Te某t) End If End If End Sub捕捉 MouseE某it 事件MouseDown、MouseUp、MouseMove。
VB 似乎提供了很好的 Mouse 事件。
但好象还缺少什么!对!还差 MouseE某it(鼠标移出)事件。
在VB 中,我们要捕捉 MouseE某it 事件,必须用 API 函数:Private Declare Function SetCapture Lib \As LongPrivate Declare Function ReleaseCapture Lib \ 然后,我们可以在控件(以 Picture1 为例)的 MouseMove 事件上加上以下代码:Dim MouseE某it As BooleanMouseOver = (0 <= X) And (X <=\<=\........SetCapture Picture1.hWnd Else ........ReleaseCapture End If如何让文本框输入完后,直接跳入下一行?我们在编制程序的时候,特别是数据库软件,经常会遇到这样一个问题:在文本框中输入完后,用户习惯性的按下回车键。
1、主次对角线求和(可以写成过程的形式)Private Function SumMain(a() as integer) For i = 1 To Ubound(a,1)s = s + a(i, i)Next isumMain=sEnd FunctionPrivate Function SumFu(a() as integer) For i = 1 To Ubound(a,1)s = s + a(i, Ubound(a,1) + 1 - i)Next isumFu=sEnd Sub2、斐波那锲数列(后一项为前面两项之和) Private sub Fib(n as Integer)Dim a() as Integera(1) = 1: a(2) = 1redim preserve a(n)For i = 3 To na(i) = a(i - 1) + a(i - 2)redim preserve a(i)Next iEnd Sub3、冒泡法排序Private Sub Sort(a() as Integer)For i = 1 To Ubound(a) - 1For j = i + 1 To Ubound(a)If A(i) > A(j) Then '''判断a(i)与a(j+1)谁大,把大的放到前边t = A(i)A(i) = A(j)A(j) = tEnd IfNext jNext i''如果要从小到大排就把"A(j) > A(j - 1)"改称"A(j) < A(j - 1)" End Sub4、求和和周边元素的和Private Function Sum(a() as Integer)as integerFor i = 1 To Ubound(a,1)For j = 1 To Ubound(a,2)s = s + a(i, j)Next jNext iSum=sEnd FunctionPrivate Function ZhouBianSum(a() as Integer)as Integer For j = 1 To Ubound(a,1)s = s + a(1, j) + a(3, j)Next jFor i = Lbound(a,1) + 1 To 3 – Lbound(a,1)s = s + a(i, 1) + a(i, 3)Next iZhouBianSum=sEnd Function5、删除一项Private Sub Del(a() as Integer, n as Integer )For i = n To 9a(i) = a(i + 1)Next iEnd Sub6、选择法排序Private Sub ChoicePX(a() as Integer )For i = 1 To Ubound(a)-1k = iFor j = i + 1 To Ubound(a)If a(k) > a(j) Thenk = jEnd IfNext jIf k <> i Thentemp = a(i)a(i) = a(k)a(k) = tempEnd IfNext iEnd Sub7、增加一项Private Sub Add(a() as Integer ,n as Integer) For i = 10 To n Step -1a(i + 1) = a(i)Next ia(n) = mEnd Sub8、转置数列Dim a(3, 4) As Integer, b(4, 3) As Integer Private Sub ZhuanZhi()For i = 1 To 4For j = 1 To 3b(i, j) = a(j, i)Next jNext iEnd Sub9、最小公倍数Private Function GongBeishu(m As Integer, n As Integer) As Integer If n <> 0 And m <> 0 Thenk = nDo While k Mod m <> 0k = k + nLoopEnd IfGongBeishu = kEnd Function10、十六进制转化为十进制Private Function ST(strz As String) As StringFor i = Len(strz) To 1 Step -1strg = Mid(strz, i, 1)If Asc(strg) >= 65 And Asc(strg) <= 70 Thena = Asc(strg) - 55ElseIf Asc(strg) >= 97 Thena = Asc(strg) - 87Elsea = strgEnd Ifs = s + a * 16 ^ (Len(strz) - i) Next iST = sEnd Function。
VB常用算法总结大全VB(Visual Basic)是一种对初学者友好的编程语言,因其简单易学的特点而受到很多人的喜爱。
在VB中,算法是编程过程中非常重要的一部分,它们用来解决各种问题,从简单的数学计算到复杂的数据处理。
本文将总结一些常用的算法,帮助VB程序员更好地应用于实际项目中。
一、排序算法1.冒泡排序冒泡排序是一种简单的排序算法,它通过不断地交换相邻的元素来对数据进行排序。
它的基本思想是从列表的第一个元素开始,依次比较相邻的两个元素,如果顺序不正确,则交换它们的位置。
重复这个过程,直到整个列表都已经排序。
2.快速排序快速排序是一种高效的排序算法,它通过选择一个基准元素,将列表分为两部分,一部分小于基准元素,一部分大于基准元素。
然后对这两部分分别进行快速排序,最后将它们合并在一起。
3.插入排序插入排序是一种简单直观的排序算法,它将列表分为已排序和未排序两部分,每次选择未排序部分的第一个元素,并插入到已排序部分的适当位置。
重复这个过程,直到整个列表都已经排序。
二、查找算法1.顺序查找顺序查找是一种简单的查找算法,它从列表的第一个元素开始,依次比较每个元素,直到找到目标元素或者遍历完整个列表。
2.二分查找二分查找是一种高效的查找算法,它要求列表已经排序。
它通过比较目标元素与列表中间元素的大小关系来确定要的部分,并缩小范围。
重复这个过程,直到找到目标元素或者确定列表中没有目标元素。
三、图算法1.深度优先(DFS)深度优先是一种用于图遍历的算法,它从一个起始点开始,沿着一个路径尽可能深地访问节点,直到遇到一个没有未访问过的相邻节点为止。
然后回溯到前一个节点,寻找其他路径。
2.广度优先(BFS)广度优先也是一种用于图遍历的算法,它从一个起始点开始,依次访问所有与起始点相邻的节点,然后再依次访问这些节点的相邻节点,直到遍历完图中的所有节点。
四、动态规划动态规划是一种解决多阶段决策问题的方法,它将问题分解为若干个阶段,并定义状态和决策。
VB常用算法总结在VB(Visual Basic)编程中,常用的算法有很多。
下面将对其中一些常见和重要的算法进行总结。
请注意,由于篇幅限制,这只是一个简要总结,无法涵盖所有算法的细节。
1.排序算法:排序算法是计算机科学中最基本和常见的算法之一、在VB中,常用的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。
排序算法通过比较和交换来对一组数据进行重新排列,使其按照指定的顺序排列。
2.查找算法:查找算法用于在一个数据集中寻找特定的值或元素。
在VB中,常用的查找算法有二分查找和线性查找等。
二分查找是一种高效的算法,可以在有序数组中快速地找到目标元素。
3.图算法:图算法是用于解决与图相关的问题的算法。
在VB中,常用的图算法包括广度优先(BFS)和深度优先(DFS)等。
这些算法可以用于寻找图中的路径、检测环和遍历图等操作。
4.动态规划:动态规划是一种用于解决最优化问题的算法。
在VB中,常用的动态规划算法有背包问题、最长公共子序列和最短路径等。
动态规划算法通过拆解问题为子问题,并保存子问题的解来避免重复计算,从而提高算法的效率。
5.字符串匹配:字符串匹配算法用于在一个字符串中查找另一个字符串。
在VB中,常用的字符串匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法等。
这些算法通过比较字符来确定字符串的匹配位置。
6.线性代数:线性代数是数学的一个分支,用于解决线性方程组和向量空间等问题。
在VB中,常用的线性代数算法有矩阵运算、向量运算和线性方程求解等。
这些算法可以应用于计算机图形学、数据分析和机器学习等领域。
7.数学运算:数学运算在VB编程中非常常见。
常用的数学运算算法包括求和、平均值、最大值、最小值和中值等。
这些算法可以通过循环和条件判断来实现。
8.加密与解密:加密和解密算法用于保护数据的安全性。
在VB中,常用的加密算法有对称加密算法(如DES和AES)和非对称加密算法(如RSA和ECC)等。
Visual Basic常用算法从逻辑结构上看,应用程序= 算法+ 数据结构。
(1)数据结构(Data-Structure),计算机将数据元素依据某种逻辑联系进行存储和组织的方式。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重依赖于是否选择了最优的数据结构。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。
这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
(2)算法(Algorithm),由基本运算及规定的运算顺序所构成的完整解题步骤。
一个算法应该具有以下五个重要的特征:①有穷性,算法必须保证执行有限步之后结束。
②确切性,算法的每一步骤必须有确切的定义。
③输入,算法有0个或多个输入,以描述运算量的初始值。
0个输入是指算法本身包含了初始值。
④输出,算法有一个或多个输出,以反映对输入数据加工后的结果。
没有结果的算法是毫无意义的。
⑤可行性,算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
计算机科学家尼克劳斯-沃思曾著过一本著名的书《数据结构十算法= 程序》,可见算法在计算机科学界与计算机应用界的地位。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
程序(Programme)就是用计算机语言描述的算法。
流程图(Flow Charts)就是图形化的算法。
解决同一问题可以有多种算法描述。
实际问题的算法种类繁多,总体上可以分为两大类:数值算法和非数值法。
对VB程序语言设计的初学者,可能会感到掌握控件的使用不难,难得的是理解和掌握算法。
但是,算法是程序的核心、编程的基础,离开算法,一事无成。
我们将介绍常用的VB算法。
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常用算法(1):累加和连乘1、算法说明累加形式:V=V+e连乘形式:V=V*e其中:V是变量,e是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量V赋初值。
一般的,累加时置初值0;连乘时置初值为1.举例求N!的结果。
Private Sub Command1_Click()Dim n%,i%,s&n=Val(InputBox("输入n"))s=1For i=1To ns=s*iNext iPrint sEnd Sub 错误的写法:Private Sub Command1_Click()Dim n%,i%,s&n=Val(InputBox("输入n"))For i=1To ns=1‘赋初值语句位置不对!s=s*iNext iPrint s‘输出s的值为n,而不是n!End Sub应用举例根据下列公式,求自然对数e的的近似值。
要求:误差小于0.00001Private Sub Command1_Click()Dim i%,n&,t!,e!e=2i=1t=1Do While t>0.00001i=i+1t=t/ie=e+tLoopPrint"计算了";i;"项目和是:";ePrint Exp(1)‘与上句输出值进行对比以证明算法的正确性End Sub解题技巧1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。
设定循环变量和通项变量,注意各变量的初值;2)分解通项表达式中各因子,并分别将各因子用循环变量表示;3)如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程;4)根据步骤1、2、3,写出通项表达式;5)根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。
通常是用:if通项表达式>10^(-N)then exit do,注意这句话一般需放在累加或者连乘式之前。
实例说明根据X值计算:要求:n项绝对值小于等于10-6为止。
1、由于循环次数不确定,因此确定用Do循环结构并定义循环变量用n表示(初值1);用户输入的值用x表示;通项用dblCos表示;累加值用sum表示,初值为0;2、分解通项式的组成于是有:private Function comp(n as long)as longdim I as longdim result as longresult=1‘此处注意,由于是连乘,初值为1for I=1to2*(n-1)result=result*Inext Icomp=resultEnd Function注意:由于是参数按地址传递,因此对于本题,实参的值不能在过程中被改变!(也是改错题常考的地方!!)4、根据步骤1、2、3,写出通项dblCos的表达式:dblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)5、根据精度要求知:If abs(dblCos)<=10^(-6)then exit do最后程序为:Private Sub Command1_Click()Dim n As Long,dblCos As Double,x As Doublex=Val(Text1.Text)n=1DodblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)If Abs(dblCos)<=10^(-6)Then Exit DoSum=Sum+dblCosn=n+1LoopPrint SumEnd SubPrivate Function comp(n As Long)As LongDim I As LongDim result As Longresult=1'此处注意,由于是连乘,初值为1For I=1To2*(n-1)result=result*INext Icomp=resultEnd Function常用算法(2):最值问题算法说明:在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。
(求最小值的方法类同。
)求若干数平均值,实质上就是先求和,再除以这些数的个数。
应用举例随机产生n个1-100(包括1和100)的数,求它们的最大值、最小值和平均值。
Private Sub Command1_Click()Dim n As Integer,i As Integer,min As Integer,max As Integer,aver As Single,s As Integer n=Val(InputBox("输入个数:"))s=Int(Rnd*100)+1max=smin=saver=sPrint"第1个数是:"&sFor i=2To ns=Int(Rnd*100)+1Print"第"&i&"个数是:"&sIf s>max Then max=sIf s<min Then min=saver=aver+sNext iaver=aver/nPrint"max=";max;"min=";min;"aver=";averEnd Sub解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。
常用算法(3):素数1、算法说明素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。
判别某数m是否是素数的经典算法是:对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。
Private Function sushu(ByVal n As Long)As BooleanDim i As LongFor i=2To n-1If(n Mod i)=0Then Exit ForNext IIf I=n then sushu=TrueEnd Function很显然,实际上,我们可以改进上面For i=2To n–1为:For i=2To int(sqr(m))这样可以很好的提高效率。
以上判断是否为素数的代码务必识记!应用举例求100-200之内素数。
Private Sub Command1_Click()Dim j As IntegerFor j=100To200If sushu(j)=True ThenPrint jEnd IfNext jEnd Sub解题技巧识记判断素数的算法过程,根据题意,灵活调用!实例说明编程题(2002年春上机试卷04)找出10000以内所有可以表示为两个平方数和的素数。
思路:首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shu-I均为平方数,则说明其可以表示为两个平方数之和。
)判断数I是否为平方数的方法:sqr(i)=int(sqr(i))Private Sub Command1_Click()Dim j As IntegerDim m As Long,n As LongFor j=2To10000If sushu(j)=True ThenIf pf(j,m,n)=True ThenList1.AddItem j&"="&m&"+"&nEnd IfEnd IfNext jEnd SubPrivate Function pf(ByVal shu As Long,m As Long,n As Long)As BooleanDim i As LongFor i=1To shu-1If(Sqr(i)=Int(Sqr(i)))And(Sqr(shu-i)=Int(Sqr(shu-i)))Thenpf=Truem=in=shu-iExit FunctionEnd IfNextEnd Function常用算法(4):进制转化1、算法说明1)十进制正整数m转换为R(2-16)进制的字符串。
思路:将m不断除r取余数,直到商为0,将余数反序即得到结果。
算法实现:Private Function Tran(ByVal m As Integer,ByVal r As Integer)As String Dim StrDtoR As String,n As IntegerDo While m<>on=m Mod rm=m\rIf n>9ThenStrDtoR=Chr(65+n-10)&StrDtoRElseStrDtoR=n&StrDtoREnd IfLoopTran=StrDtoREnd Function2)R(2-16)进制字符串转换为十进制正整数。
思路:R进制数每位数字乘以权值之和即为十进制数。
算法实现:Private Function Tran(ByVal s As String,ByVal r As Integer)As integer Dim n As Integer,dec As Integers=UCase(Trim(s))For i%=1To Len(s)If Mid(s,i,1)>="A"Thenn=Asc(Mid(s,i,1))-Asc("A")+10Elsen=Val(Mid(s,i,1))End Ifdec=dec+n*r^(Len(s)-i)Next iTran=decEnd Function常用算法(5):约数因子1、算法说明1)最大公约数:用辗转相除法求两自然数m、n的最大公约数。
(1)首先,对于已知两数m、n,比较并使得m>n;(2)m除以n得余数r;(3)若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)(4)mßn nßr再重复执行(2)譬如:10与5分析步骤:m=10n=5r=m mod n=0所以n(n=5)为最大公约数24与9分析步骤:m=24n=9r=m mod n=6r≠0m=9n=6r=m mod n=3r≠0m=6n=3r=m mod n=0所以n(n=3)为最大公约数算法实现1、循环实现Private Function GCD(ByVal m As Long,ByVal n As Long)As Long Dim temp As LongIf m<n Then temp=m:m=n:n=tempDim r As LongDor=m Mod nIf r=0Then Exit Dom=nn=rLoopGCD=nEnd Function2、递归实现Private Function GCD(ByVal m As Long,ByVal n As Long)As Long Dim temp As LongIf m<n Then temp=m:m=n:n=tempDim r As Longr=m Mod nIf r=0ThenGCD=nElsem=nn=rGCD=GCD(m,n)End IfEnd Function2)最小公倍数m×n÷最大公约数3)互质数最大公约数为1的两个正整数解题技巧该算法需要识记!这种类型题目的扩展是约数和因子题型。