您好,欢迎访问三七文档
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.011.213.813.412.313.1B.11.012.311.213.813.113.4C.11.011.213.412.313.113.8D.11.013.412.311.213.813.1fori=1ton-1’变量i控制遍数n-1forj=ntoi+1step-1’控制每次比较次数n-i和方向ifd(j)d(j-1)then’不满足降序(后项前项)则交换temp=d(j):d(j)=d(j-1):d(j-1)=tempendifnextjnextifori=1ton-1forj=n-1toistep-1’理论上而言,只需控制每次比较次数n-i即可ifd(j)d(j+1)then’根据j的初值和终值判断是j+1还是j-1temp=d(j):d(j)=d(j+1):d(j+1)=tempendifnextjnextifori=n-1to1step-1’变量i控制遍数n-1forj=1toiifd(j)d(j+1)thentemp=d(j):d(j)=d(j+1):d(j+1)=tempendifnextjnextifori=n-1to1step-1forj=2toi+1’控制比较次数n-i和方向ifd(j)d(j-1)thentemp=d(j):d(j)=d(j-1):d(j-1)=tempendifnextjnexti2、有一组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(0ton)中的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、有如下程序段:Fori=7to5step-1Forj=7to9-istep-1Ifa(j)a(j-1)thenk=a(j):a(j)=a(j-1):a(j-1)=kEndifNextjNexti数组元素a(1)到a(7)的数据依次为3,9,1,5,8,6,2经过该程序段加工后,a(1)到a(3)排列为()A.123B.986C.391D.8657、有如下VB程序段,已知数组a中有10个元素,保存的数据分别为:56、21、18、64、72、49、3、7、22、80,则程序运行后变量m的值为○1m=0:i=1Dowhilei=10ifma(i)thenm=a(i)i=i+1Loop8、以下程序段的功能是找到a(0)....到.a(99).....中最小值...并显示在label1上,请填空:m=a(0)Fori=1to99if○1thenm=a(i)nexti○29、以下程序段的功能是找到a(1)到a(10)中最大值存储在a(10).....中并打印在界面上,请填空:fori=1to○1ifa(i)a(i+1)thent=a(i):a(i)=a(i+1):a(i+1)=tNextiprint○210、数组a(1to10)中保存的数据依次分别为:80、7、56、21、18、64、72、49、38、22,则程序运行后变量m的值为○1j的值为○2text1.text中显示的内容为○3。m=1Forj=2to11step1Ifa(m)=a(j-1)thenm=j-1NextjText1.text=str(a(j-2))11、假设有200个数字存储在数组中,数组下标从1开始,请运用冒泡排序及冒泡排序的变式将数组按要求排列,在横线上填上正确的代码。降序(常规冒泡)升序(常规冒泡)fori=1to199forj=200to○1step-1ifa(j)○2thentemp=a(j)a(j)=a(j-1)a(j-1)=tempendifnextjnextifora=1to199forb=○1toastep-1ifs(b)○2thentemp=s(b)○3s(b+1)=tempendifnextbnexta降序(从前往后冒,小的数往后移)升序(从前往后冒,大的数往后移)fori=199to1step-1forj=○1toiifa(j)○2thentemp=a(j)a(j)=a(j+1)a(j+1)=tempendifnextjnextiforx=199to1step-1fory=2to○1ifa(y)○2thena(y)=a(y)+a(y-1)○3a(y)=a(y)-a(y-1)endifnextynextx12、在冒泡排序时,当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此小明对冒泡排序进行了优化,编写了一个VB程序,功能如下,程序窗体加载即运行时,在列表框List1中显示随机产生的n个[0,100]整数,单击“排序”的按钮Command1,在列表框List2中显示降序排序后的结果,运行的效果图所示。实现上述功能的VB代码如下,请在划线处填空,并改正有错的加框处代码。ConstnAsInteger=10Dima(1Ton)AsIntegerPrivateSubForm_Load()DimiAsIntegerRandomizeFori=1Ton○1List1.AddItemStr(a(i))NextiEndSubPrivateSubCommand1_Click()DimtmpAsInteger,iAsInteger,jAsInteger,kAsIntegerFor○2k=0Forj=nToi+1Step-1Ifa(j)a(j-1)Then应修改为:k=k+1EndIfNextjIfTheni=n应修改为:NextiFori=1Ton○3NextiEndSub13、n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面。小刘发现:当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化,编写了一个VB程序,功能如下:运行程序时,在列表框List1中显示排序前数据,单击“排序”按钮Commaiid1,在列表框List2中显示这些数据按升序排序后的结果,在标签Label3中显示排序过程的加工遍数。运行效果如图所示。实现上述功能的VB代码如下,但加框处代码有错,请改正。Dima(1To8),nAsIntegerPrivateSubForm_Load()'n=8,排序前数据存储在数组a中,并在列表框Listl中显示;代码略EndSubPrivateSubCommand1_Click()DimflagAsBoolean'flag值为True表示一遍加工中发生过交换i=1:flag=TrueDoWhile应修改为:flag=FalseForj=nToi+1Step-1If○1Thenk=a(j):a(j)=a(j-1):a(j-1)=k○2EndIfNextji=i+1LoopLabel3.Caption=排序过程的加工遍数为+应修改为:Fori=1TonList2.AddItemStr(a(i))NextiEndSubK0tmp=a(j):a(j-1)=a(j):a(j)=tmpi=nOrflagStr(i)
本文标题:VB冒泡排序专题
链接地址:https://www.777doc.com/doc-3155213 .html