您好,欢迎访问三七文档
VB常用算法(六)排序关键词:排序算法1、算法说明1)选择法排序(1)从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;(2)除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;(3)以此类推,最后构成递增序列。譬如:869327第一轮交换后269387第二轮交换后239687第三轮交换后236987第四轮交换后236789第五轮无交换236789程序代码如下:PrivateSubxzPaiXu(a()AsDouble,shengAsBoolean)'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。DimiAsInteger,jAsIntegerDimtempAsDoubleDimmAsIntegerFori=LBound(a)ToUBound(a)-1'进行数组大小-1轮比较m=i'在第i轮比较时,假定第'i个元素为最值元素Forj=i+1ToUBound(a)'在剩下的元素中找出最'值元素的下标并记录在m中IfshengThen'若为升序,则m记录最小元素'下标,否则记录最大元素下标Ifa(j)a(m)Thenm=jElseIfa(j)a(m)Thenm=jEndIfNextj'将最值元素与第i个元素交换temp=a(i)a(i)=a(m)a(m)=tempNextiEndSub调用该过程示例:OptionBase1PrivateSubCommand1_Click()Dimb(6)AsDoubleb(1)=8b(2)=6b(3)=9b(4)=3b(5)=2b(6)=7CallxzPaiXu(b,True)Fori%=1To6Printb(i)NextEndSub2)冒泡法排序选择排序法在每一轮排序时找最值元素的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对就交换位置,出了内循环,最值数已经冒出。譬如:869327869327869237862937826937286937….238697….236879….236789….236789程序代码如下:PrivateSubmpPaiXu(a()AsDouble,shengAsBoolean)'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。DimiAsInteger,jAsIntegerDimtempAsDoubleDimmAsIntegerFori=LBound(a)ToUBound(a)-1'进行n-1轮比较Forj=UBound(a)Toi+1Step-1'从n到i个元素两两进行比较IfshengThen'若次序不对,马上进行交换Ifa(j)a(j-1)Thentemp=a(j)a(j)=a(j-1)a(j-1)=tempEndIfElseIfa(j)a(j-1)Thentemp=a(j)a(j)=a(j-1)a(j-1)=tempEndIfEndIfNextj'出了内循环,一轮排序结束'最值元素冒到最上边NextiEndSub调用该过程代码基本同上。2、实战练习1)补充代码(2003秋二(10))下面是一个采用拉锯式排序法对数组元素按升序进行排序的程序,所谓“拉锯式排序法”是这一遍把最小的元素从下到上送到最上的位置,下一遍则是从上到下把最大的元素送到最下的位置。OptionBase1PrivateSubCommand1_Click()Dima(10)AsInteger,iAsIntegerFori=1To10a(i)=Int(Rnd*10)+1Text1=Text1&Str(a(i))NextiCallshaker_sort(a)Fori=1To10Text2=Text2&Str(a(i))NextiEndSubPrivateSubShaker_sort(k()AsInteger)DimiAsInteger,cAsInteger,dAsIntegerDimtAsIntegerc=1d=(1)DoFor(2)Step-1Ifk(i=1)k(i)Thent=k(i-1):k(i-1)=k(i):k(i)=tEndIfNexti(3)Fori=c+1TodIf(4)Thent=k(i-1):k(i-1)=k(i):k(i)=tEndIfNextid=d-1LoopWhile(5)EndSub2)编程题(2002秋上机试卷04)把文本框输入的字符串按降序添加到列表框中。
本文标题:VB常用算法六
链接地址:https://www.777doc.com/doc-2865787 .html