《C语言程序设计》数组.pptVIP

  • 39
  • 0
  • 约3.06万字
  • 约 78页
  • 2019-11-06 发布于广东
  • 举报
* * * * * * * * * * * * * * * * * 思考题 ⒈升序的条件如何构造? ⒉联合排序问题 已知一个班有36个同学,a数组存放一门课的成绩,m数组存放 其学号。要求将成绩从大到小排序。 提示:应考虑的问题是当a数组元素比较交换时,m数组如何处 理? a[ 5 ] 89.5 m[ 5 ] 1005 a[ 7 ] 90.0 m[ 7 ] 1007 被动排序方。 ⑶选择排序 冒泡排序在内层循环的比较中,满足条件的每次都需要交换。 其中一些交换是无效的,交换算法会占用系统时间,从而降低算法 效率。 选择排序算法的基本思路,每轮排序将a[ i ]假定为极值,每次 在a[ i ]到 a[MAX]中找出个极值,记录其位置,最后让极值位置的 元素与a[ i ]交换。 选择排序保证每轮排序只有一次交换,且为有效的交换! 选择排序算法演示 选择排序程序 #include stdio.h void main(void) { int i, j,iMax,a[10]={4,3,5,1,10,12,2,6,7,9}, iTemp; for(i=0; i9 ;i++) { iMax=i; for( j=i+1;j10;j++) if(a[iMax]a[j])iMax=j; if(iMax!=i) { iTemp=a[i]; a[i]=a[iMax]; a[iMax]=iTemp;} } for(i=0;i10; i++) printf(”%4d”,a[i]); } 排序循环 假定最大值位置。 循环比较找出最大值的位置。 与本次比较的第一个元素交换。 chp4ex6 升序如何构造? /* example 4-19 选择排序 */ #includestdio.h void main(void) { int i,j,k; float math[10],temp; printf(please enter:); for(i=0;i10;i++) /* 循环 */ scanf(%f,math[i]); /* 输入成绩 */ for(i=0;i9;i++) /* 外循环负责趟数 */ { k = i; /* 设最小数位置 */ for(j=i+1;j10;j++) /* 内循环负责比较 */ { if(math[k] math[j]) k = j; /* 修正最小数位置 */ } if(k!=i) 【例4-19】已知10个学生的数学成绩,利用选择排序对其按升序排列。 { temp = math[i]; math[i] = math[k]; math[k] = temp; /* 将最小数交换到前面 */ } } for(i=0;i10;i++) /* 循环 */ printf(%5.1f ,math[i]); /* 输出 */ } 4. 倒序 【例4-20】利用循环以实现反向输出。 /* example 4-20 反向输出 */ #includestdio.h void main

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档