授课教师聂晓颖课程名称C语言程序设计单位数学与信.pptVIP

  • 9
  • 0
  • 约1.89千字
  • 约 13页
  • 2019-01-12 发布于天津
  • 举报

授课教师聂晓颖课程名称C语言程序设计单位数学与信.ppt

授课教师聂晓颖课程名称C语言程序设计单位数学与信

授课教师:聂 晓 颖 课程名称:C语言程序设计 单 位:数学与信息科学学院 §6.1.2 冒泡排序(Bubble Sort) 从高到低进行排序 { 43, 38, 55, 99} { 43, 38, 55, 99, 72, 12, 27, 30 } { 43, 38, 55, 99, 72, 12, 27, 30, 51, 70, 21, 36, 19, 5, 63, 49} { a1, a2, a3, …… , a100000} 1、算法思想 2、程序实现 §6.1.2 冒泡排序(Bubble Sort) 例子 将下面一组无序数列排成从小到大的有序数列 { 43, 38, 55, 99, 72, 12, 27, 30 } 分析:首先为了方便分析,我们把所给的数据 先用一个表格列出来,如下: 原数据和序号 序号 1 2 3 4 5 6 7 8 数据 43 38 55 99 72 12 27 30 43 38 55 99 72 12 27 30 43 99 99 99 99 38 43 55 72 12 27 30 99 72 72 72 38 43 72 99 55 27 12 30 72 55 99 99 99 99 72 72 72 55 55 55 43 43 43 38 30 38 43 30 27 12 38 38 30 27 12 30 27 12 27 12 27 12 27 第1趟比较 7次 第2趟比较 6次 第3趟比较 5次 第4趟比较 4次 第5趟比较 3次 第6趟比较 2次 第7趟比较 1次 (1)对于n个数据,从前向后逐次比较相邻的两个数据,若为逆序则交换;直至第n-1和第n个数比较完为止——第一趟冒泡排序,结果最大的数被放在最后一个元素位置上; (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置; (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束。 冒泡排序算法思想 for(j=0;jn-i-1;j++) if (a[j]a[j+1]) { ……} for(i=0;in-1;i++) 第1趟 i=0 比较 n-1次 for(j=0;jn-1;j++) 第2趟 i=1 比较 n-2次 for(j=0;jn-2;j++) 第n-1趟 i=n-2 比较 n-(n-1)次 for(j=0;j1;j++) 第t趟 i=t-1 比较 n-t=n-i-1次 …… 用i的表达式表示 j的终止条件 冒泡排序算法描述 问:选用哪种循环语句?应该用几重循环? 冒泡排序算法N-S流程图 循环n-1趟(i由0变化到n-2) 循环进行n-i-1次比较(j由0变化到n-i-2) 交换a[j]和a[j+1]的值 a[j]a[j+1] 输出a[0]、a[1]、…、a[n-1] 将n个数存入a[0]、a[1]、…、a[n-1] 真 假 for(i=0;in-1;i++) for(j=0;jn-i-1;j++) for(i=0;in-1;i++) for(j=0;jn-i-1;j++) if (a[j]a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} #define n 8 main() { 冒泡排序C语言程序实现 int a[n]={43,38,55,99,72,12,27,30}, i,j,t; printf(\nBefore sorted:\n); for(i=0;in;i++) printf(%5d,a[i]); for(i=0;in-1;i++) for(j=0;jn-i-1;j++) if (a[j]a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} printf(the sorted numbers :\n); for(i=0;in;i++) printf(%d ,a[i]); printf(\n); } 数据 准备 冒泡 排序 数据 输出 控制比较的趟数,循环一次表示比较一趟 控制趟内比较的次数,循环一次表示比较一次 冒泡排序 小结 画流程图 问题分析 算法思想 编写程序 思考 如何改进程序尽可能减少比较次数? 冒泡排序算法图解

文档评论(0)

1亿VIP精品文档

相关文档