冒泡排序法

  • 格式:ppt
  • 大小:273.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
现假设有8个随机数已经在数组中, 现假设有8个随机数已经在数组中,开始排序 初始状态: 初始状态: 第一趟排序: 第一趟排序 : 第一趟最后结果: 第一趟最后结果: 两两相邻比较: 两两相邻比较: 6 数组a 数组a
a[0]
8 5
a[1]
5 8 4
a[2]
4 6 8
a[3]
6 8
a[4]
9 3
a[5]
看图示
第4章 构造型数据类型
第二:再对 的范围内再进行一趟冒泡,又将该范 第二 再对a[0]到a[N-2]的范围内再进行一趟冒泡 又将该范 再对 到 的范围内再进行一趟冒泡 围内的最大值换到了a[N-2]中. 围内的最大值换到了 中 看图示二 第三:依次进行下去 最多只要进行 趟冒泡,就可完成排序 第三 依次进行下去,最多只要进行 依次进行下去 最多只要进行N-1趟冒泡 就可完成排序 趟冒泡 就可完成排序.
break i ++;


冒泡法程序
main( ) i,j,a[8],temp,swap; { int i,j,a[8],temp,swap; clrscr( ); for(i=0 i<8 for(i=0;i<8;i++) scanf("%d",&a[i]); scanf("%d",&a[i]); for(i=0;i<8for(i=0;i<8-1;i++) { swap=0; for(j=0 j<8 for(j=0;j<8-i-1;j++) a[j+1 if ( a[j] > a[j+1] ) { swap=1; temp=a[j]; temp=a[j]; a[j]=a[j+1 a[j]=a[j+1]; a[j+1]=temp; a[j+1]=temp; } if (!swap) break; }
看图示三
第四:如果在某趟冒泡过程中没有交换相邻的值 则说明排序 第四 如果在某趟冒泡过程中没有交换相邻的值,则说明排序 如果在某趟冒泡过程中没有交换相邻的值 已完成,可以提前结束处理 可以提前结束处理. 已完成 可以提前结束处理
Swap变量作用 Swap变量作用
看流程
第4章 构造型数据类型
第一讲 之 冒泡法排序
看流程
第五趟结果为: 第五趟结果为:
第六趟结果为: 第六趟结果为:
第七趟结果(最终)为: 第七趟结果(最终)
回到思路二
冒泡法排序流程图
程序整体流程: 程序整体流程: 开始 输入数据 i<8 N i<8 Y
printf(“%d”,a[i]);
细化输入数据流程: 细化输入数据流程: 细化输出数据流程: 细化输出数据流程: i=0 i=0 N Y
写程序
冒泡法排序流程图
i =0 加 入 Swap 变 量 的 流 程 图 i<8i<8-1
Y swap= 0 j= 0 N
j<8j<8-i-1 Y a[j]>a[j+1] Y
swap=1; 交换a[j] a[j]与 交换a[j]与 a[j+1]的值 a[j+1]的值
N N
j ++
N
!(swap)
Y
上一页
回到第四点
流程图 比较
第四章 构造型数据类型
第一讲 之 冒泡法排序
swap 变量的作用
如果在某趟冒泡过程中没有交换相邻的值, 如果在某趟冒泡过程中没有交换相邻的值,则说明排序 已完成,可以提前结束处理. 已完成,可以提前结束处理.
比如:为原始数列: 15、27、96、32、65、78、 比如:为原始数列:8、15、27、96、32、65、78、79 这个序列用冒泡法排序,一趟之后就得到升序结果, 这个序列用冒泡法排序,一趟之后就得到升序结果, 而之后的六趟都可以不要进行。 而之后的六趟都可以不要进行。 所以,swap变量就是用来标识如果某趟排序之后已经 变量就是 所以,swap变量就是用来标识如果某趟排序之后已经 得到最终结果,则多余的次数就无须进行。 得到最终结果,则多余的次数就无须进行。
数组a 数组a
i
6 2
i
8 3
5 4
4 5
6
9 6
3 8 8
2 9 6
K K K
K
K
K
K
每趟选择排序是找到待排序序列中最小 的元素,把它交换到待排序的最前的位置。 的元素,把它交换到待排序的最前的位置。 所以,一趟只有一次交换。 所以,一趟只有一次交换。
回到冒泡图示


本次课主要内容: 本次课主要内容: 1.冒泡法基本思想 通过n 趟排序把n 冒泡法基本思想, 1.冒泡法基本思想,通过n-1趟排序把n个待排序数 大的元素象石头一样往下沉(放在最后), ),小的元素 大的元素象石头一样往下沉(放在最后),小的元素 象气泡一样往上浮。 象气泡一样往上浮。 2.冒泡法的流程图 2.冒泡法的流程图 3.冒泡法程序 3.冒泡法程序 4.冒泡法中swap变量的作用 冒泡法中swap 4.冒泡法中swap变量的作用 5.简述了选择法排序 要求回去预习选择法排序。 简述了选择法排序, 5.简述了选择法排序,要求回去预习选择法排序。
第4章 构造型数据类型
分析: 分析
假设有N个数据放在数组 中 现要把这 个数从小到大排序. 现要把这N个数从小到大排序 假设有 个数据放在数组a中,现要把这 个数从小到大排序 个数据放在数组
冒泡排序法的基本思想是: 冒泡排序法的基本思想是
第一:在 的范围内,依次比较两个相邻元素的值 第一 在a[0]到a[N-1]的范围内 依次比较两个相邻元素的值 到 的范围内 依次比较两个相邻元素的值, 则交换a[J]与a[J+1],J的值取 的值取0,1,2,……,N-2;经过 若a[J]>a[J+1],则交换 则交换 与 的值取 经过 这样一趟冒泡,就把这 个数中最大的数放到a[N-1]中. 就把这N个数中最大的数放到 这样一趟冒泡 就把这 个数中最大的数放到 中 用冒泡排序法对8个整数 例1:用冒泡排序法对 个整数 用冒泡排序法对 个整数{6,8,5,4,6,9,3,2}进行从小到 进行从小到 大排序. 大排序
即第i趟排序的待排序范围是a[i]~a[N-1]的元 即第i趟排序的待排序范围是a[i]~a[N-1]的元 要从中选出值最小的元素并与a[i]交换位置 交换位置。 素,要从中选出值最小的元素并与a[i]交换位置。
冒泡法与选择法的比较
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
5
4
6
6
3
2
8
9
这是第三趟冒泡的待排序元素 接着第三趟冒泡 排序结果为: 排序结果为:
4
5
6
3
2
6
8
9
回到思路二
第四章 构造型数据类型
第一讲 之 冒泡法排序
同样第四趟结果为: 同样第四趟结果为:
4 4
5 3 3 2
3 2 2 3
2 5 4 4
6 6 5 5
6 6 6 6
8 8 6 6
9 9 8 8 9 9
百度文库
for(i=0 i<8 for(i=0;i<8;i++) printf("%d,",a[i]); printf("%d,",a[i]); printf("\n"); printf("\n"); }
注:对n个元素冒泡 个元素冒泡 排序第i趟排序的待排序 排序第 趟排序的待排序 元素是a[0]到a[n-i-1]。 元素是 到 。 这里的i表示数组的下标 表示数组的下标. 这里的 表示数组的下标
3 9 2
a[6]
2 9
a[7]
回到思路一
总结
第四章 构造型数据类型
第一讲 之 冒泡法排序
第二趟冒泡排序开始: 此时的待排序元素 第二趟冒泡排序开始:
6
a[0]
5
a[1]
4
a[2]
6
a[3]
8
a[4]
3
a[5]
2
a[6]
9
a[7]
同样对待排序元素两两比较后结果为: 同样对待排序元素两两比较后结果为:
计算机系网络教研室
第4章 构造型数据类型
1、一维数组应用举例——冒泡法排序 一维数组应用举例—— ——冒泡法排序 经典算法介绍: 经典算法介绍: 排序问题是程序设计中的典型问题之一, 排序问题是程序设计中的典型问题之一,它有很广泛 的应用,比如给你一组学生成绩,要你输出前2 名的成绩。 的应用,比如给你一组学生成绩,要你输出前 0 名的成绩。 这时你就要用到排序。再比如要问你中国的GDP排世界第 这时你就要用到排序。再比如要问你中国的 排世界第 你要先把各国GDP排个序,才知道中国在第几。 排个序, 几,你要先把各国 排个序 才知道中国在第几。 所谓排序就是将数组中的各元素的值按从小到大的顺 序或按从大到小的顺序重新排列。 序或按从大到小的顺序重新排列。 排序过程一般都要进行元素值的比较和元素值的交换。 排序过程一般都要进行元素值的比较和元素值的交换。
回到流程图
冒泡法与选择法的比较
用选择排序法对键盘输入的N个数从小到大进行排序. 用选择排序法对键盘输入的N个数从小到大进行排序. 基本思想: 基本思想: 假设有N个数据放在数组a 现要把这N个数从小到大排序. 假设有N个数据放在数组a中,现要把这N个数从小到大排序. 首先: a[0]到a[N-1]的范围内 选出最小值与a[0]交换 的范围内, 交换; 首先: 在a[0]到a[N-1]的范围内,选出最小值与a[0]交换; 然后: a[1]到a[N-1]范围内 选出最小值与a[1]交换 范围内, 交换; 然后: 在a[1]到a[N-1]范围内,选出最小值与a[1]交换; 接着是a[2]到a[N-1]的范围 这样依次进行下去,进行N 的范围, 接着是a[2]到a[N-1]的范围,这样依次进行下去,进行N-1次 选择后就可完成排序. 选择后就可完成排序.
scanf(“%d”,&a[i]);
冒泡排序
输出数据
i ++ i ++
结束
冒泡法排序流程图
i =0 i<8i<8-1
Y N
j= 0 N j<8j<8-i-1 Y
执行第i N 执行第i趟 比较相邻 a[j]>a[j+1] 两元素的 Y 冒泡排序
值并交换 交换a[j] a[j]与 交换a[j]与 a[j+1]的值 a[j+1]的值 j ++ i ++