第十章 二维数组与冒泡排序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3,0)
i
j
num[i][j] 第二列 100
(0,1)
200 200
300 (1,1) 400 500 600
(3,1) 800 700 400
(2,1)
600
第四行
700 0 3
3
1
800
案例
• 一个学习小组有5个人,每个人有三门课的考 试成绩。求全组分科的平均成绩和各科总平均 成绩。
张 王 李 赵 周
演示示例:将5个学员成绩排序
冒泡排序
示例7源代码 • 关键代码分析:
for (i = 0; i < scores.Length -1 ; i++) 外层循环终止条件:数组长度-1 { for (j = 0; j < scores.Length -1 - i ; j++) 内层循环终止条件: { 数组长度 – 1 - i if (scores[j] > scores[j + 1]) { // 交换元素 经过一轮比较交换, temp = scores[j]; 最大的元素换到了最后 scores[j] = scores[j + 1]; 面 scores[j + 1] = temp; } } }
数学 87
英语 65 语文 78
76
90 88
86
77 90
92
83 82
75
97 87
案例
案例分析:
定义一个3行5列的二维数组存放成绩 关键代码 将每门的所有成绩相加求总成绩,然后求该门课程平均成绩 score[3][5]={{87,76,86,92,75},{65,90,77,83,97},{78,88,90,82,87}}; 将各门课程的平均分相加 ,然后求平均分,就得到总的平均 int i,j,s=0,avg,v[3]; 分 for(i=0;i<3;i++){
num
二维数组的初始化-1
二维数组赋初值的方式:
分行赋初值
连续赋初值
二维数组的初始化-2
分行赋初值:
int books[4][2] = {{11, 1294},{22,450}, {33,4000}, {44,79}};
相当于以一维数组为 元素
二维数组的初始化-2
连续赋初值:
int books[4][2] = {11, 1294,22,450, 33,4000, 44,79};
冒泡排序
什么冒泡排序?
根据轻气泡在上,重气泡在下的原则,对气泡进行 扫描比较,直到最后任何两个气泡都是轻者在上,重者 在下位置.
冒泡排序
请 5 位同学上台,在老师的指导下, 按照冒泡排序的算法按身高从低到高排序
冒泡排序 • 冒泡排序:
冒泡排序
第一轮:比较了4次
第二轮:比较了3次
16 9
25 16 9
正确 错误,[]应在数组名后
错误,元素下标应 小于数组长度
ห้องสมุดไป่ตู้ 预习检查
如何定义二维数组? 数据类型 数组名称 [常量表达式] [常量表达式] 如何引用二维数组的元素? 数组名称 [下标][下标] 对一维数组排序,有些什么办法? 冒泡排序法
任务—二维数组
求各门课程的平均分和总平均分
任务—冒泡排序
冒泡排序-小结
理解冒泡排序的基本原理 N个数 控制比较的轮数—i控制外层循环 i<N-1 控制每轮比较的次数—j控制内层循环循环 j<N-1-i
总结
如何定义二维数组?
int ary[2][3];
二维数组主要有哪些赋值方式?
分行和连续
怎么样引用二维数组?
数组名[行下标][列下标]
参考ArrayDemo1
二维数组-小结
数组的每一行初始化赋值用―{}‖括起来,并用―,‖分开, 总的再加一对―{}‖括起来,最后以―;‖表示结束。 例如:int ary[2][3]={{1,2,3},{4,5,6}}; 二维数组存储是连续的,因此可以用一维数组初始化 的办法来初始化二维数组。 例如:int x[2][3]={1, 2, 3, 4, 5, 6}; 对数组初始化时,如果初值表中的数据个数比数组元 素少,则不足的数组元素用0来填补。
跟一维数组一样的哦
二维数组的初始化-3
其他赋值方式: 部分元素赋值,其余元素自动为0,如:
int arr[2 ][3] = { {1}, {4} };
对全部元素都赋值,则定义数组时对第一维的 长度可以不指定,但是第二维的长度不能省略
int arr[ ][3] = { {1,2,3}, {4,5,6} }; int arr[2][ ] = { {1,2,3}, {4,5,6} };
对一维数组进行排序
本章目标
二维数组的定义 二维数组的初始化 二维数组的使用 冒泡排序
二维数组 3-1
内存
定义:datatype arrayName[rowsize][colsize];
num[0][0] num[1][0] num[2][0] num[0][1] num[1][1] num[2][1]
外层循环 i=0 i=1 i<4 i=2 i=3 i < N-1 第三轮:比较了2次 第四轮:比较了1次 循环2次:j < 2 循环1次:j < 1 j < 4-i
内层循环 第一轮:比较了4次
第二轮:比较了3次 循环4次:j < 4 循环3次:j < 3 j<?
j < N-1-i
用二重循环实现冒泡排序
冒泡排序的原理
轻在前,重在后
num[0][0] num[0][1]
int num[4][2];
num[1][0]
num[1][1] num[2][0]
4X2=8
num[3][0] num
8*sizeof(int) num[3][1] 字节
num[2][1]
num[3][0] num[3][1]
为了便于理解,二维数组一般理 解为几行几列的矩阵
第十章 二维数组与冒泡排序
一维数组-回顾
什么是数组? 数组是一组有序的类型相同的数据 的集合 如何定义一个一维数组? 数据类型 数组名称 [常量表达式]
一维数组-回顾
#include <stdio.h> void main(){ int ary[]={1,5,8}; int [3]ary1={1,5,8}; printf(“%d\n”,ary*3+); }
for(j=0;j<5;j++){ s=s+score[i][j]; } v[i]=s/5; s=0; }
练习
二维数组举例: ArrayDemo1:在二维数组a中选出各行最大的元素组成一 个一维数组b 数组a如下: int a[3][4]={{26,43,24,123},{45,13,57,20},{,65,13,78,96}};
• 代码框架:
for (i = 0; i < N-1 ; i++) { for (j = 0; j < N-1-i ; j++) { // 比较 j 和 j+1 位置的元素 // 如果前大后小就交换 } }
冒泡排序速记口诀(升序): N 个数字来排队 两两相比小靠前 外层循环 N-1 内层循环 N-1-i
9 90 25 23 23 25
23 90
第三轮:比较了2次 第四轮:比较了1次
每次比较相邻两数 小的交换到前面 每轮结束后最大的数交换到最后
用二重循环实现冒泡排序
• 如何用二重循环将5个数字排序?N = 5
– 5个数字存放在一维数组中 – 外层循环控制比较多少轮,循环变量 i – 内层循环控制每轮比较多少次,循环变量 j
错误
二维数组的使用
int i, j, num[4][2]; 第一列 0 : 0 二维数组引用的一般形式为 for (i = 0; i <= 3; i++) (0,0) 第一行 0 { 数组名[下标][下标] 列下标 100 1 for (j = 0; j <=1 ; j++) 行下标 1 0 (1,0) { 第二行 300 1 1 scanf("%d",&num[i][j]); num[0] [0] (2,0) 2 0 } 500 第三行 } 2 1
相关文档
最新文档