- 1、本文档共329页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
谭浩强C语言程序设计讲述
例2: 排序问题–––计算机处理数据的一个重要问题 排序算法较多,一种最简单的算法–––选择排序法用得较多。基本思路: 设有n个数,需将它们从小到大顺序排列。则: 2. 在剩下的n –1个元素中,找出第二小的元素并把它放在第二个位置上。 3. 对上述过程重复,直至剩下一个元素。 1. 从n个元素中,通过比较,找出最小元素,放在第一个位置上。 例: 8, 4, 20, 100, 28, 1, 两次交换 第2次: 1, 4, 20, 100, 28, 8 ––– 一次交换 第3次: 1, 4, 8, 100, 28, 20 ––– 一次交换 第4次: 1, 4, 8, 28, 100, 20, 1, 4, 8, 20, 100, 28 两次交换 第5次: 1, 4, 8, 20, 28, 100 ––– 一次交换 第1次: 4, 8, 20, 100, 28, 1 1, 8, 20, 100, 28, 4 从以上例子可以看到: 用到两种循环,第一种循环––找第i小的元素,第二种循––对其后的元素的一一比较。 流程图: 初始化 输入n个元素?a数组 i?1 j?i+1 a[i]a[j] 交换a[i] a[j] B A No Yes j?j+1 jn i?i+1 i n–1 打印结果 结束 内循环 外循环 B A No Yes Yes No 程序: main ( ) { int a [11]; int i, j, t; printf ( please input 10 n~:\n ); for (i=1; i=n; i++) scanf( %d , a[i]); printf( \n ); for (i=1; i=9; i++) for (j=i+1; j=10; j++) if (a[i]a[j]) { t=a[i]; a[i]=a[j]; a[j]=t;} printf ( the sorted numbers: \n ); for (i=1; i=10; i++) printf( %d , a[i]; } 另一种排序法:冒泡排序法(详见教材) §6.2 二维数组 6.2.1 二维数组的定义 1. 不可将定义写为int a[4,10]。 形式 类型说明符 数组名[常量表达式] [常量表达式] 例: int a[4] [10]; float x[8] [20]; 2. 可将二维数组的元素看成为若干个特殊的一维数组。 如: int b[3] [4]; 则: 有三个特殊的一维数组b[0],b[1], b[2],每一个又有四个元素: b[0][0], b[0][1], b[0][2], b[0][3], b[1][0], b[1][1], b[1][2], b[1][3], b[2][0], b[2][1], b[2][2], b[2][3], b[3][0], b[3][1], b[3][2], b[3][3], 3. 二维数组的存放方式为: 按行存放。由此可推广 至三维、n维数组的定义和存放。 即: 最右边的下标变化最快。 4. 初始化: ? 按行给二维数组赋初值: static int a[3][4]={{1,2,3,4}, {5,6,7,8,}, {9,10,11,12,}}; 可以去掉其中的{ }。 ? 可以对部分元素赋初值,但需表达清楚。如: static int a[3][4]={{1,2},{3},{8}}。 则相当于 1 2 0 0 3 0 0 0 8 0 0 0 ?可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小. static int a[ ][4]={1,2,3,…,12}; 6.2.2 二维数组元素的引用 形式: 数组名[下标][下标] 其中的下标为整型表达式,但不得越界。 与一维数组元素一样,二维数组元素相当于同类型的简单变量。 if (ab) {i=b; j=a;} for (; i=j; i++
文档评论(0)