资源简介 (共13张PPT)一、复习1、冒泡排序思路:小元素从根部逐次向上浮动2、冒泡排序程序设计要点:(1)基本形:For i = 1 To n-1For j = n To i + 1 Step -1If d(j) < d(j - 1) Thent = p(i):p(i) = p(i - 1):p(i - 1) = tEnd IfNext jNext i 规律:从根部向上冒泡,先冒出最小,连续双循环,双循环变量值对角加一,循环体数值交换2、冒泡排序程序设计要点(2)冒泡排序程序的小小变形:For j =2 to nFor i = n To j Step -1If p(i) < p(i - 1) Thenk = p(i): p(i)=p(i - 1):p(i - 1) = kNext iNext j规律:对角相等、数值交换。思考:排前10个应怎样改程序?3、冒泡排序的循环比较次数及优缺点(1)、n个数冒泡排序的循环比较次数是(n-1)+(n-2)+…+3+2+1(2)、 n个数冒泡排序的交换次数不定(3)、冒泡排序的优点:算法简洁明了、便于编程实现。(4)、冒泡排序的缺点:交换次数频繁,程序执行时间长。二、选择排序选择排序(递增)的思路是先找出n个数中最小的数据(下标跟踪),与数组第一个元素中的数据交换位置再在余下的n-1个元素中继续找最小的元素,与第二个元素中的数据交换位置依次类推,直到排序结束。对比:冒泡、选择排序的循环次数(即比较次数)相同,不同的是交换次数。三、选择排序算法演示第 1 遍 选择27363218d (1)d (2)d (3)d (4)j=2k=127363218j=3k=127363218j=4k=j18363227k=1For j=2 to 4if d(k)>d(j) then k=jNext jIf k不等于1时,交换d(1)和d(k)交换d(1)与d(4)第2遍选择18363227d (1)d (2)d (3)d (4)j=3k=218363227j=3k=j18363227j=4k=jj=418363227k=j18273236k=2For j=3 to 4if d(k)>d(j) then k=jNext jIf k<>2 then 交换d(2)和d(k)第3遍选择18273236d (1)d (2)d (3)d (4)j=4k=3k=3For j=4 to 4if d(k)>d(j) then k=jNext jIf k<>3 then 交换d(3)和d(k)四、算法分析第1遍选择 ,j从2开始到4k=1For j=2 to 4if d(k)>d(j) then k=jNext jIf k<>1,交换d(1)和d(k)k=2For j=3 to 4if d(k)>d(j) then k=jNext jIf k<>2 then 交换d(2)和d(k)第2遍选择 ,j从3开始到4第3遍选择 ,j从4开始到4k=3For j=4 to 4if d(k)>d(j) then k=jNext jIf k<>3 then 交换d(3)和d(k)用i来表示次数的变化For i=1 to 3K=i ‘因为循环变量的值在循环体内不能随意改变For j=i +1 to 4五、程序实现For i = 1 To n- 1 ‘选择第i个作为最小的数k = iFor j = i + 1 To n '如果找到更小的,用k记住它的编号If d(k) > d(j) Then k = j ‘注意:d(k)与d(j)比较Next j特点:平行加一,下标跟随,数值交换,小数上冒。——选择排序基本形If k <> i Then '如果最小的数所在的位置不是i,则交换t = d(i)d(i) = d(k)d(k) =t '注意: d(k)与d(i)交换End IfNext i六、选择排序和冒泡排序的比较交换次数 循环比较次数冒泡 <=(n-1)*n/2 (n-1)+…+3+2+1选择 <=n-1 (n-1)+…+3+2+1以n个数据为例:(运行比较程序)冒泡:从根部向上冒泡,逐个交换,先冒出最小,升序排序。选择:从顶部向下找较小数的下标,找到最小的数再交换至前,升序排序。选择排序是冒泡排序的改进。七、选择排序的变形For i= n To 2 Step -1Max = i ‘选择第i个作为最大的数For j = 1 To i-1 ‘如果找到更大的,用max记住它的编号If d(Max) < d(j) Then Max = j ‘d(min)与d(j)比较Next jIf Max <> i Then ‘如果最大的数所在的位置不是i,则交换k = d(i)d(i) = d(Max)d(Max) = k ‘d(max)与d(i)交换End IfNext I特点:对角减一,下标跟随,数值交换,大数下沉。八、复习题解高考倒计时P70例4、 P74例11、 P77第5题(共18张PPT)冒 泡 排 序经典算法之排序:把杂乱无章的数据变为有序的数据的过程。 (递增或递减)冒泡排序:把较小的数据逐次向上推移的一种排序技术。如何实现将较小数逐次从下向上推移呢?一、冒泡排序的思想:从最下面一个元素起,依次比较相邻的两个元素中的数据,将较小的数据调换到上面,小元素像气泡一样上浮。二、冒泡排序的过程设置数组变量:a (i)为牌的值(i=1、2、3、4、5)12345数组变量a12345第一轮冒泡过程a(5)>a(4)保持不变a(4)a(3)a(2)12345第二轮冒泡过程a(5)>a(4)保持不变a(4)a(3)12345第三轮冒泡过程a(5)a(4)>a(3),不变12345第四轮冒泡过程a(5)>a(4),不变当堂练习1、对“648251”中的6个数码进行两轮冒泡排序后即为某游戏中数字密码锁的密码,该密码是( )A)684521 B)462518C)126485 D)864521C当堂练习2、下表中的原始数据是一组学生的军训打靶成绩,若采用冒泡排序算法对其进行排序,则第3遍的排序结果是 。原始数据 第一遍 第二遍 第三遍 第四遍98 85 85 8595 98 88 8885 95 98 9393 88 95 9588 93 93 989385889598分析:如果要对有5个元素的数组进行排序,那么1、要进行________轮冒泡2、第一轮冒泡的时候它进行比较的范围是从_________到________第2轮冒泡的时候呢?是从__________到________第3轮冒泡的时候呢?是从__________到________4a(5)与a(4)a(2) 与a(1)a(5)与a(4)a(3) 与a(2)a(5)与a(4)a(4)与a(3)第4轮冒泡的时候呢?是从__________到________a(5)与a(4)a(5)与a(4)A(j)两数交换YN对有5个元素的数组进行冒泡排序流程图1开始i=1i<=4冒泡i=i+1YNYj=5J>= j=j-1NJ>=i+1流程图2For i= 1 to 4Next iFor j=5 to step -1if a(j)t=a(j):a(j)=a(j-1):a(j-1)=tend ifNext j比较两个数,如果后面的数比前面的小,则交换i=1i=2i=3i=4i=12i=23i=34i=45a(j)—a(j-1)a(5)—a(4)a(4)—a(3)a(3)—a(2)a(2)—a(1)a(j)—a(j-1)a(5)—a(4)a(4)—a(3)a(3)—a(2)a(j)—a(j-1)a(5)—a(4)a(4)—a(3)a(j)—a(j-1)a(5)—a(4)j=5 to 2j=5 to 3j=5 to 4j=5 to 5i+1程序实现提高:如果要对有n个元素的数组进行排序,那么要进行________轮冒泡,其中外循环变量i从 到 变化,内循环变量j从 到 变化。n-11n-1ni+1a(1)、a(2)、a(3)、…a(n-2)、a(n-1)、a(n)For i= 1 to 4For j= 5 to i+1 step -1if a(j)t=a(j):a(j)=a(j-1):a(j-1)=tend ifNext jNext i 演示已知五个数的冒泡排序VB程序n-1n三、冒泡排序的程序实现思考1:第一个循环改为For i=2 to n后,j怎样变呢?思考2:if a(j)a(j-1) 后对排序结果有何影响呢?四、小结:1、冒泡排序:每次从最下面的元素开始,通过逐次往上比较,将较小的数向上推移2、如果有n个数组的元素进行排序,则要进行n-1趟冒泡…….第n-1趟冒泡要经过1次比较第一趟冒泡要经过n-1次比较第二趟冒泡要经过n-2次比较总计要经过:(n-1)+(n-2)+(n-3)+………+2+1次比较五、复习题解高考倒计时P70例3、 P77第6题、P80第14题(共15张PPT)1、对分查找的基本思想对分查找的前提是数据已经有序(以递增为例),然后把待查找的数据与数组中间位置的数比较,如果比中间位置的数大,在数组的后半部分继续查找,否则在数组的前半部分查找,继续对分查找,直到找到待查找的数在数组中的位置或数组已无法对分。查找算法1015171822273545485265677285979812345678910111213141516下标元素数组d(i ):I=1J=16M=fix((i+j)/2) =8第1次比较:Key>d(m)查找范围应该变成d(9)~d(16)Key=52我们用变量 I和J记录所要查找范围的起始和终止位置2、对分查找的基本过程:1015171822273545485265677285979812345678910111213141516下标元素数组d( ):I=8+1J=16M=fix((i+j)/2) =12第2次比较:Key查找范围应该变成d(9)~d(11)Key=52我们用变量 I和J记录所要查找范围的起始和终止位置1015171822273545485265677285979812345678910111213141516下标元素I=9J=12-1M=fix((i+j)/2) =10第3次比较:Key=d(m)找到了Key=52思考: 如果key=33,能找吗?那么至少需要比较几次?(2)在规模为n的数组变量d中进行对分查找的流程图未找到,输出结果:0开始I←1 ,j←ni<=j 找到,输出结果:m结束NY计算中点m← (i+j)\2d(m)=key D(m)i←m+1j←m-1YYNN3、当堂练习:利用对分查找,在某校报名参加学生会主席竞选的学号列表20080101、20080135、20080238、20080342、20080450、20080558、20080633、20080708、20080846、20080910中,查找学号为20080846学生的过程中,依次被访问到的学号是( )(A)20080450、20080708、20080846(B)20080450、20080708、20080910、20080846(C)20080558、20080708、20080846(D)20080558、20080708、20080910、200808464、对分查找的核心代码分析Key = Val(Text1.Text)i = 1j = numDo While i <= jIf d(M) = Key ThenLabel1.Caption="在数组的"+Str(M)+"位置中"Exit SubEnd IfIf d(M) < Key ThenElseEnd IfLoopLabel1.Caption = "在数组中没有找到" + Str(Key)m = (i + j) \ 2i = m + 1j=m-1这个语句还有其它写法吗 Int((i+j)/2)或fix((i+j)/2)5、顺序查找27363218d (1)d (2)d (3)d (4)输入查找的元素值key=32i=1i=2i=3此时d(i)=key,数组中的第3个位置如果输入查找的元素值key=22i=1i=2i=3i=4i=527363218d (1)d (2)d (3)d (4)此时i等于5,超过数组中元素个数,找不到从数组d的第1个元素d(1)开始,依次判断各元素的值是否与查找键key的值相等。(1)、过程(2)顺序查找的流程图开始i 1d(i)=key i<=n i i+1未找到,输出结果:0找到,输出结果:i结束YNYN(3)转化成程序Private Sub Command2_Click() '顺序查找Key = Val(Text2.Text)For i = 1 To numIf d(i) = Key ThenLabel2.Caption = "在数组的 " + Str(i) + " 位置中"Exit ForEnd IfNextIf i = num + 1 ThenLabel2.Caption = "在数组中没有找到" + Str(Key)End IfEnd Sub6、顺序与对分查找比较是否需要事先排序 平均查找次数顺序查找 不需要 (n+1)/2多对分查找 需要 Log2n少例1:从中国上海到美国旧金山海底电缆共有15个接点。现在某接点发生故障,需及时修理,为了尽快断定故障发生点,一般至多需要检查接点的个数为 个。点评:这种检查线路故障的方法,就是二分法的应用。二分法不仅可用于查找线路、水管、气管故障,还可以用于实验设计、资料查询,也是求解高次方程的常用方法。7、对分查找算法的实际应用例2:在26枚崭新的金币中,混入了一枚外表与它们完全相同的假币(重量比真金的略低),现在只有一台天平,请问你最多称 次就可以发现这枚假币?分析:本题可以通过二分法的思想来处理这种对称的问题。解:第一次各13枚称量,选出较轻一端的13枚,继续称;第二次两端各6枚,若平衡,则剩下一枚即为假币,否则选取出较轻的6枚继续称;第三次两端各3枚,选取出较轻的3枚继续称;第四次,两端各一枚,若不平衡,可找出假币,若平衡,则剩余的是假币,所以,最多只需称4次。8、复习题解高考倒计时:P70例5、P75例12、P77第8题、P81第15题 展开更多...... 收起↑ 资源列表 1、冒泡排序.ppt 2、选择排序.ppt 3、查找算法.ppt