VB冒泡排序专题.docx

上传人:rrsccc 文档编号:10411972 上传时间:2021-05-15 格式:DOCX 页数:6 大小:46.68KB
返回 下载 相关 举报
VB冒泡排序专题.docx_第1页
第1页 / 共6页
VB冒泡排序专题.docx_第2页
第2页 / 共6页
VB冒泡排序专题.docx_第3页
第3页 / 共6页
VB冒泡排序专题.docx_第4页
第4页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《VB冒泡排序专题.docx》由会员分享,可在线阅读,更多相关《VB冒泡排序专题.docx(6页珍藏版)》请在三一文库上搜索。

1、VB 冒泡排序专题班级姓名知识点回顾:1、冒泡排序的特征:从后往前两两比较数据,不符合大小关系的两数交换 至达到要求。2、关于冒泡需理解:升序:将后数小于前数的两个数进行交换;降序:将后数大于前数的两数进行交换; N 个数最多进行N-1 遍排序;两数比较的次数最多为N*(N-1)/ 2;两数交换次数最多为:冒泡有很多改进算法,在练习中要加强理解和记录;3、冒泡经典代码:( 以降序 为例 )N*(N-1)/ 2;for i=1 to n- 1变量 i 控制遍数 n-1for j=n to i+1step -1控制每次比较次数n-i 和方向if d(j)d(j-1)then不满足降序(后项前项)则

2、交换temp=d(j) : d(j)=d(j-1) :d(j-1)=tempend ifnext jnext ifor i=1 to n-1for j=n-1 to istep -1理论上而言, 只需控制每次比较次数if d(j)d(j+1)then根据 j 的初值和终值判断是j+1 还是temp=d(j) : d(j)=d(j+1) :d(j+1)=tempend ifnext jnext in-i j-1即可冒泡经典算法默认数据从后往前冒,第一次比较的两个数一定是而事实上冒泡也可以从前往后冒,第一次比较的两个数一定是a(n)与 a(n-1) ,一定是先把最值放a(1)与 a(2),一定是先

3、把最值放在a(1)中;a(n)中。for i=n-1 to 1step -1变量 i 控制遍数n-1for j= 1 to iif d(j)d(j-1) thentemp=d(j) : d(j)=d(j-1) :d(j-1)=tempend ifnext jnext i4、字符串的排序:第一个字符一样时,可以排序,按照字符的ASCII 码。 从第一个字符开始比较,直到比出大小,即当字符串按照第二个字母的ASCII码排 ,以此类推。 例 : “ bcd”大于“ adb”,“ efad”小于“ efcd”。巩固练习:1、在运动会上, 男生第一组6 位选手的百米成绩(单位: 秒)分别是 “ 13.4

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.12、有一组10 个数据的无序序列,利用冒泡排序算法进行从小到大的排序,需要比较的次数和最多交换的次数,最多需要进行加工的遍数分别为()A. 9, 45, 9B. 45, 15, 9C.45, 45, 9D.15

5、, 45, 83、在 NBA某赛季中,快船队5 场比赛得分依次为97, 89, 111, 70, 90,若采用冒泡排序算法对其进行从小到大排序,在整个排序过程中,数据97 被交换的次数是()A 1次B2次C3次D4次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、下列关于排序的算法,不正确的是()D 一般

6、情况下,选择排序比冒泡排序效率更高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) 排列为 ()A123B 986C 391D 8657、有如下VB程序段,已知数组a 中有 10 个元素,保存的数据分别为:56、21、 18、64、 72、49、 3、7、22、 80,则程序运行后变量m的值为1m=0

7、:i=1Do while i=10if ma(i+1) then t=a(i):a(i)=a(i+1):a(i+1)=tNext iprint210、数组 a( 1 to 10)中保存的数据依次分别为:80、 7、 56、21、 18、64、 72、49、 38、 22,则程序运行后变量 m的值为 1j的值为 2text1.text中显示的内容为3。m=1For j=2 to 11 step 1If a(m)=a(j-1) thenm=j-1Next jText1.text=str(a(j-2)11、假设有 200 个数字存储在数组中,数组下标从1 开始,请运用冒泡排序及冒泡排序的变式将数组按

8、要求排列,在横线上填上正确的代码。降序(常规冒泡)升序(常规冒泡)for i=1 to 199step -1for a=1 to 199to a step -1for j=200 toforb=11ifa(j)thenifs(b)then22temp=a(j)temp=s(b)a(j)=a(j-1)3a(j-1)=temps(b+1)=tempend ifend ifnext jnext bnext inext a降序(从前往后冒,小的数往后移)升序(从前往后冒,大的数往后移)for i=199 to 1 step -1for x=199 to 1 step -1for j=1to ifory

9、=2 to1ifa(j)2thenifa(y)2thentemp=a(j)a(y)=a(y)+a(y-1)a(j)=a(j+1)3a(j+1)=tempa(y)=a(y)-a(y-1)end ifend ifnext jnext ynext inext x12、在冒泡排序时,当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此小明对冒泡排序进行了优化,编写了一个VB程序,功能如下,程序窗体加载即运行时,在列表框List1中显示随机产生的 n 个 0,100整数,单击“排序”的按钮Command1,在列表框 List2中显示降序排序后的结果,运行的效果图所示。实现上述功能的VB

10、代码如下,请在划线处填空,并改正有错的加框处代码。Const n As Integer = 10Dim a(1 To n) As IntegerPrivate Sub Form_Load()Dim i As IntegerRandomizeFor i = 1 To n1List1.AddItem Str(a(i)Next iEnd SubPrivate Sub Command1_Click()Dim tmp As Integer, i As Integer, j As Integer, k As IntegerFor2k = 0For j = n To i + 1 Step -1If a(j)

11、 a(j - 1) Thentmp = a(j): a(j - 1) = a(j): a(j) = tmp应修改为:k = k + 1End IfNext jIfThen i = n应修改为:K0Next iFor i = 1 To n3Next iEnd Sub13、n 个数据的冒泡排序需要经过n-1 遍加工, 每一遍加工自下而上比较相邻两个数据,把较小者交换到上面。小刘发现:当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化, 编写了一个VB程序,功能如下: 运行程序时, 在列表框 List1中显示排序前数据,单击“排序”按钮 Commaiid1,在

12、列表框List2中显示这些数据按升序排序后的结果,在标签Label3 中显示排序过程的加工遍数。运行效果如图所示。实现上述功能的VB代码如下,但加框处代码有错,请改正。Dim a(1 To 8),n As IntegerPrivate Sub Form_Load() n=8,排序前数据存储在数组a 中,并 在列表框Listl 中显 示;代码略End SubPrivate Sub Command1_Click()Dim flag As Boolean flag 值为 True 表示一遍加工中发生过交换i = 1 : flag = TrueDo Whilei = n Or flag应修改为:flag = FalseFor j = n To i + 1 Step -1IfThen1k = a(j): a(j) = a(j - 1): a(j - 1) = k2End IfNext ji = i + 1LoopLabel3.Caption = 排序过程的加工遍数为 +Str(i)应修改为:For i = 1 To nList2.AddItem Str(a(i)Next iEnd Sub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1