《动画演示(冒泡法)ppt课件.pptx》由会员分享,可在线阅读,更多相关《动画演示(冒泡法)ppt课件.pptx(40页珍藏版)》请在三一办公上搜索。
1、算法实现动画演示,范俊,冒泡排序法(升序)设计算法思路:如果对包含有n个数的数组an实行冒泡排序,则需要n-1轮比较;第1轮比较时,从数组元素a0开始,依次比较a0和a1,a1和a2,a2和a3,.,an-2和an-1,并将大数后移,比较的结果是将数组最大数存入数组尾元素an-1中;第2轮比较时,同样从数组元素a0开始,依次比较a0和a1,a1和a2,a2和a3,.,an-3和an-2,并将大数后移,比较的结果是数组剩余元素的最大数存入元素an-2中;依此类推,第n-1轮比较时,比较a0和a1,将大数后移,存入元素a1中。排序完毕,数组元素按照升序排列。说明:大数后移是指将每一对参与比较的元素
2、的较大值存入后面的元素,较小值存入前面的元素。,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,注意:该PPT采用单步运行的方式演示了冒泡排序法的实现过程,并实时显示各变量的值。,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,s0 s1 s2 s3
3、s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,i,j,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,定义变量,赋初值,i=0时,表示数组元素的第一轮比较,该轮比较会将参与比较的两个数的较大数后移,比较的最终结果是数组中最大数移到最后。,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,2,3,9,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;
4、j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,j,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=0时,比较变量s0和s1中值的大小,将较大数存入s1,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,2,3,9,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,0,j,值为4,printf(“%d%d%d%d%d n”
5、,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,3,2,9,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,0,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=0时,比较变量s0和s1中值的大小,将较大数存入s1,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n
6、=5,i,j,t;,3,2,9,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,1,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=1时,比较变量s1和s2中值的大小,将较大数存入s2,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,3,2,9,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i
7、;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,1,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=1时,比较变量s1和s2中值的大小,将较大数存入s2,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,9,2,3,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,1,j,值为4,printf(“%d%d%d
8、%d%d n”,s0,s1,s2,s3,s4);,j=1时,比较变量s1和s2中值的大小,将较大数存入s2,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,9,2,3,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,2,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=2时,比较变量s2和s3中值的大小,将较大数存入s3,冒泡法演示(升序),程序
9、段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,9,2,3,5,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,2,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=2时,比较变量s2和s3中值的大小,将较大数存入s3,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,9,2,3,5,7,s0 s1 s2 s
10、3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,2,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=2时,比较变量s2和s3中值的大小,将较大数存入s3,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,5,9,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj
11、+1=t;,5,n,0,i,3,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=3时,比较变量s3和s4中值的大小,将较大数存入s4,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,5,9,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,3,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=3时,
12、比较变量s3和s4中值的大小,将较大数存入s4,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,5,9,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,3,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=3时,比较变量s3和s4中值的大小,将较大数存入s4,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3
13、,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,0,i,4,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=4时,44为假,循环结束,该轮比较结束,数组最大数存入s4,元素最大值存入s4,i的值为1,开始第二轮比较,因s4已经存放的是数组最大数,故不参与比较,该轮比较只对s0s3的相邻元素比较大小,并将较大数后移,冒泡法演示(升序),程序段:#includemain(),in
14、t s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,4,j,值为4,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=0时,比较变量s0和s1中值的大小,将较大数存入s1,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i
15、+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,0,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,0,j,值为3,printf(“%d%d%d%d%d n”,s0,s
16、1,s2,s3,s4);,j=0时,比较变量s0和s1中值的大小,将较大数存入s1,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,1,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=1时,比较变量s1和s2中值的大小,将较大数存入s2,冒泡法演示(升序),程序段:#includema
17、in(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,1,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=1时,比较变量s1和s2中值的大小,将较大数存入s2,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0
18、;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,2,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=2时,比较变量s2和s3中值的大小,将较大数存入s3,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,
19、i,2,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=2时,比较变量s2和s3中值的大小,将较大数存入s3,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,7,2,3,9,5,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,2,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=2时,比较变量s2和s3中值的
20、大小,将较大数存入s3,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,1,i,3,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,j=3时,33为假,循环结束,该轮比较结束后,次大数存入s3,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i
21、,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,2,i,3,j,值为3,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,i的值变为2,开始第三轮比较,同理,该轮比较会找出s0s2中的最大数,并存入s2中,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j
22、=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,2,i,0,j,值为2,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,2,i,0,j,值为2,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,
23、s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,2,i,1,j,值为2,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0
24、;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,2,i,1,j,值为2,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,2,i,2,j,值为2,printf(“%d%d%d%d%d
25、n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,3,i,2,j,值为2,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s
26、2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,3,i,0,j,值为1,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,3,i,0,j,值为1,prin
27、tf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,3,i,1,j,值为1,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,
28、2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,4,i,1,j,值为1,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,5,2,3,9,7,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,4
29、,i,1,j,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,值为1,冒泡法演示(升序),程序段:#includemain(),int s10=2,9,3,7,5,n=5,i,j,t;,s0 s1 s2 s3 s4,for(i=0;in-1;i+),for(j=0;jn-1-i;j+),if(sjsj+1)t=sj;sj=sj+1;sj+1=t;,5,n,4,i,1,j,printf(“%d%d%d%d%d n”,s0,s1,s2,s3,s4);,值为1,使用冒泡法排序时,当数组中有N个元素时,需要比较N-1轮,第一轮比较会将最大数(升序)或最小数(降序)置于数组最后一个元素中,在第二轮比较时,数组最后一个元素不参与比较,剩余元素中的最大数(升序)或最小数(降序)置于数组的倒数第二个元素中,依此类推,可实现数组元素的升序或降序排列。,演示完毕谢谢大家,