冒泡排序算法ppt课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们预计最多一共要经过多少趟排序呢?
.
初始
序号
1
2
3
4
5
6
7
8
数据 49
38
65
97
76
13
27
49
序号 1
2
3
4
5Baidu Nhomakorabea
6
7
8
1趟
数据 38
49
65
76
13
27
49
97
序号 1
2
3
4
5
6
7
8
2趟
数据 38
49
65
13
27
49
76
97
序号 1
2
3
4
5
6
7
8
3趟
数据 38
49
13
27
49
65
76
97
序号 1
分析:后面的排序只要 按照这种方法不断进行就 行了。
那么同样的结构要进 行多少次呢?
i++
是
i <=5
否 结束
有没有办法让流程图更 加简洁呢?
.
三:画整个冒泡排序的流程图。
开始
分析:这是一个两重循环结构。
j=0
i=0
是 r[i ]>r[i +1] 否 t=r[i ] r[i ]=r[i +1] r[i +1]= t
scanf("%d",&r[i]); for( ; ; )
for( ; ; ) {
i<=6-j j++ j<=6
输出数据 结束
}
printf("The sorted numbers:\n");
for(i=0;i<8;i++)
printf("%5d",r[i]);
system("pause");
}
.
冒泡排序
97>49, 交换位置 49>384,9交<换65位, 6保置5<持9不7,变保9持7>不796变7,>交139换,7交>位2换置7,位交置换位置
对比原第数一据趟经排过序第,一一趟共排进序行,了实多现少了次什比么较目?的?
.
第一趟排序后的数据和序号 序号 0 1 2 3 4 5 6 7 数据 38 49 65 76 13 27 49 97
冒泡排序算法
株洲市第二中学 信息技术组
刘辉琴 杜新宇
.
活动: 按将照下计面算一机组的无工序作的方数式据将从下小面到一大组排无列序。的数 据从小到大排列。
{ 49,38,65,97,76,13,27,49 }
数据如何存储? ——一维数组
定义一维数组: int r[8]; 数组元素为: r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7]
第二趟排序的步骤: 序号 0 1 2 3 4 5 6 7 数据 38 49 65 7163 172367 274769 4796 97
38<494,保9<持65不,6保变5<持7不67,6变保>1持3不,7交6变>换27位, 置交76换7>64位<99置,7交, 保换持位不置变 经过第二趟排序,实现了什么目的?
.
观察原数据与第一、二趟排序后的数据 序号 0 1 2 3 4 5 6 7 数据 49 38 65 97 76 13 27 49 序号 0 1 2 3 4 5 6 7 数据 38 49 65 76 13 27 49 97 序号 0 1 2 3 4 5 6 7 数据 38 49 65 13 27 49 76 97
.
为了方便分析,我们把数组r中的元素先用 一个表格列出来,如下:
原数据和序号 序号 0 1 2 3 4 5 6 7 数据 49 38 65 97 76 13 27 49
第一趟排序的步骤: 序号 0 1 2 3 4 5 6 7 数据 4398 3489 65 9776 791673 19237 29479 4997
我们把它分成几步来做。
.
一.画出比较r[0]与r[1] 的算法流程图:
分析:
是
t=r[0] r[0] =r[1]
r[1] = t
继续:是
开始 r[0]>r[1]
根据流程图完善代码:
否第一步做什么if?({
)
如何交换数据? }
否 r[1]>r[2]
t=r[1] r[1] =r[2]
r[2] = t
有没有办法让流程图更 加简洁呢?
printf("The sorted numbers:\n"); for(i=0;i<8;i++) printf("%4d",r[i]); system("pause"); }
2
3
4
5
6
7
8
4趟
数据 38
13
27
49
49
65
76
97
5趟
序号
1
2
3
4
5
6
7
8
数据 13
27
38
49
49
65
76
97
6趟
序号
1
2
3
4
5
6
7
8
数据 13
27
38
49
49
65
76
97
序号 1
2
3
4
5
6
7
8
7趟
数据 13
27
38
49
49.
65
76
97
描述算法:
试着将我们刚才排序的全过程用算法流 程图表示出来。
i++ 是 i <=?
否
j++
是
j<=6
否 . 结束
开始 输入数据
j=0
i=0
是
r[i]>r[i+
否
1]
t=r[i ] r[i ] =r[i +1] r[i +1] = t
i++
main() { int r[8]; int i,j,t; printf("Input 8 numbers:\n"); for(i=0;i<8;i++)
基本思想:
对相邻两个数进 行比较,将较小的调 到前面,两两比较一 轮之后,最大的一个 数被放置在最后面; 接着从头开始重复执 行以上操作,次大的 数被放置在倒数第二 位,依次类推,数列 由后往前逐渐成型。
.
排序算法
冒泡排序 选择排序 插入排序 ……
.
小结:
1、冒泡排序的基本原理、算法流程图及 程序实现。 2、一维数组 3、双重循环
.
参考程序:
main() { int r[8];int i,j,t;
printf("Input 8 numbers:\n"); for(i=0;i<8;i++) scanf("%d",&r[i]); for(j=0;j<7;j++)
for(i=0;i<7-j;i++) if(r[i]>r[i+1]) {t=r[i]; r[i]=r[i+1]; r[i+1]=t;}
for( ; if ( {
;) )
i++
}
是 i <=6
否
结束
.
按照这种画法第二趟、第三趟、第四趟排序的流程图 怎样画?怎样把整个冒泡排序的流程图画出来?
开始
i=0
是 rR[i[]1>]>r[Ri +[21]] 否 tt==Rr[[i2]] rR[i[1]=]=r[Ri [+21]] rR[i[+21]=]=t t
不断的这样画下去要画多少个 类似的选择结构?.
…
二.画出第一趟排序的算法流程图: 用简洁的循环结构进行表示 根据流程图完善程序:
开始
i=0
是 r[ri[]0>]>r[ri[+1]1] 否 tt==rr[[i0]] r[Rir[]01=]=r[rRi[+[12]1]] r[ir[+11]]==t t
.
初始
序号
1
2
3
4
5
6
7
8
数据 49
38
65
97
76
13
27
49
序号 1
2
3
4
5Baidu Nhomakorabea
6
7
8
1趟
数据 38
49
65
76
13
27
49
97
序号 1
2
3
4
5
6
7
8
2趟
数据 38
49
65
13
27
49
76
97
序号 1
2
3
4
5
6
7
8
3趟
数据 38
49
13
27
49
65
76
97
序号 1
分析:后面的排序只要 按照这种方法不断进行就 行了。
那么同样的结构要进 行多少次呢?
i++
是
i <=5
否 结束
有没有办法让流程图更 加简洁呢?
.
三:画整个冒泡排序的流程图。
开始
分析:这是一个两重循环结构。
j=0
i=0
是 r[i ]>r[i +1] 否 t=r[i ] r[i ]=r[i +1] r[i +1]= t
scanf("%d",&r[i]); for( ; ; )
for( ; ; ) {
i<=6-j j++ j<=6
输出数据 结束
}
printf("The sorted numbers:\n");
for(i=0;i<8;i++)
printf("%5d",r[i]);
system("pause");
}
.
冒泡排序
97>49, 交换位置 49>384,9交<换65位, 6保置5<持9不7,变保9持7>不796变7,>交139换,7交>位2换置7,位交置换位置
对比原第数一据趟经排过序第,一一趟共排进序行,了实多现少了次什比么较目?的?
.
第一趟排序后的数据和序号 序号 0 1 2 3 4 5 6 7 数据 38 49 65 76 13 27 49 97
冒泡排序算法
株洲市第二中学 信息技术组
刘辉琴 杜新宇
.
活动: 按将照下计面算一机组的无工序作的方数式据将从下小面到一大组排无列序。的数 据从小到大排列。
{ 49,38,65,97,76,13,27,49 }
数据如何存储? ——一维数组
定义一维数组: int r[8]; 数组元素为: r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7]
第二趟排序的步骤: 序号 0 1 2 3 4 5 6 7 数据 38 49 65 7163 172367 274769 4796 97
38<494,保9<持65不,6保变5<持7不67,6变保>1持3不,7交6变>换27位, 置交76换7>64位<99置,7交, 保换持位不置变 经过第二趟排序,实现了什么目的?
.
观察原数据与第一、二趟排序后的数据 序号 0 1 2 3 4 5 6 7 数据 49 38 65 97 76 13 27 49 序号 0 1 2 3 4 5 6 7 数据 38 49 65 76 13 27 49 97 序号 0 1 2 3 4 5 6 7 数据 38 49 65 13 27 49 76 97
.
为了方便分析,我们把数组r中的元素先用 一个表格列出来,如下:
原数据和序号 序号 0 1 2 3 4 5 6 7 数据 49 38 65 97 76 13 27 49
第一趟排序的步骤: 序号 0 1 2 3 4 5 6 7 数据 4398 3489 65 9776 791673 19237 29479 4997
我们把它分成几步来做。
.
一.画出比较r[0]与r[1] 的算法流程图:
分析:
是
t=r[0] r[0] =r[1]
r[1] = t
继续:是
开始 r[0]>r[1]
根据流程图完善代码:
否第一步做什么if?({
)
如何交换数据? }
否 r[1]>r[2]
t=r[1] r[1] =r[2]
r[2] = t
有没有办法让流程图更 加简洁呢?
printf("The sorted numbers:\n"); for(i=0;i<8;i++) printf("%4d",r[i]); system("pause"); }
2
3
4
5
6
7
8
4趟
数据 38
13
27
49
49
65
76
97
5趟
序号
1
2
3
4
5
6
7
8
数据 13
27
38
49
49
65
76
97
6趟
序号
1
2
3
4
5
6
7
8
数据 13
27
38
49
49
65
76
97
序号 1
2
3
4
5
6
7
8
7趟
数据 13
27
38
49
49.
65
76
97
描述算法:
试着将我们刚才排序的全过程用算法流 程图表示出来。
i++ 是 i <=?
否
j++
是
j<=6
否 . 结束
开始 输入数据
j=0
i=0
是
r[i]>r[i+
否
1]
t=r[i ] r[i ] =r[i +1] r[i +1] = t
i++
main() { int r[8]; int i,j,t; printf("Input 8 numbers:\n"); for(i=0;i<8;i++)
基本思想:
对相邻两个数进 行比较,将较小的调 到前面,两两比较一 轮之后,最大的一个 数被放置在最后面; 接着从头开始重复执 行以上操作,次大的 数被放置在倒数第二 位,依次类推,数列 由后往前逐渐成型。
.
排序算法
冒泡排序 选择排序 插入排序 ……
.
小结:
1、冒泡排序的基本原理、算法流程图及 程序实现。 2、一维数组 3、双重循环
.
参考程序:
main() { int r[8];int i,j,t;
printf("Input 8 numbers:\n"); for(i=0;i<8;i++) scanf("%d",&r[i]); for(j=0;j<7;j++)
for(i=0;i<7-j;i++) if(r[i]>r[i+1]) {t=r[i]; r[i]=r[i+1]; r[i+1]=t;}
for( ; if ( {
;) )
i++
}
是 i <=6
否
结束
.
按照这种画法第二趟、第三趟、第四趟排序的流程图 怎样画?怎样把整个冒泡排序的流程图画出来?
开始
i=0
是 rR[i[]1>]>r[Ri +[21]] 否 tt==Rr[[i2]] rR[i[1]=]=r[Ri [+21]] rR[i[+21]=]=t t
不断的这样画下去要画多少个 类似的选择结构?.
…
二.画出第一趟排序的算法流程图: 用简洁的循环结构进行表示 根据流程图完善程序:
开始
i=0
是 r[ri[]0>]>r[ri[+1]1] 否 tt==rr[[i0]] r[Rir[]01=]=r[rRi[+[12]1]] r[ir[+11]]==t t