第5章批量数据处理数组ppt课件.ppt
《第5章批量数据处理数组ppt课件.ppt》由会员分享,可在线阅读,更多相关《第5章批量数据处理数组ppt课件.ppt(65页珍藏版)》请在三一文库上搜索。
1、第5章 批量数据处理数组,一维数组 排序和查找 二维数组 字符串,一维数组,有时,我们需要存储一批同类型的数据,如有十只羊,主人要保存每只羊的重量,并从中挑选一只最肥的羊。 解决方案:可以定义十个double型的变量sheep1, ,sheep10,然后比较十个值,找出一个最大值。 缺点: 定义了十个变量。要是有100只羊就要定义100个变量 程序只能用顺序结构 如果羊群规模发生变化,程序就得重写,数组,数组是保存一组同类元素的数据类型,它有两个特征: 数组元素是有序的 数组元素是同类的 定义数组要定义三个基本内容: 数组名字 数组元素的类型 数组的大小,数组的定义,格式: 类型 数组名元素个
2、数; 其中,元素个数必须是常量。如: int intarray10; 但 int n=10; int intarrayn; 是错的 常用的方法是将元素个数定义为一个常量。如: #define NumOfElement 10 int intarrayNumOfElement; 相当于 int intarray10;,初始化,定义数组时可以对数组初始化 float x5 = -1.1, 0.2, 33.0, 4.4, 5.05 ; 初始化表的长度短于要被初始化的数组元素数目,那么剩余元素被初始化为0。 带有初始化的数组可以不定义数组规模,编译器根据初值的个数决定数组的大小 int a=1,2,3,
3、4,5; 则默认数组大小为5,初始化表,数组元素,数组元素的使用是通过数组名及元素的序号来指定,如intarray2。当数组的大小为n时,元素的序号为0 n-1。 元素的序号称为下标。程序中,下标可为整数、整型变量或结果为整型的任意表达式。正是这一特性,使得数组的应用非常灵活。,数组在内存中,定义数组就是定义了一块连续的空间,空间的大小等于元素数*每个元素所占的空间大小。 数组元素按序存放在这块空间中。,为数组分配空间,如: int intarray5;占用了20个字节,因为每个整型数占四个字节。如给intarray3赋值为3,如果这块空间的起始地址为100,那么在内存中的情况是: 当你引用变
4、量intarrayidx时,系统计算它的地址100+idx*4,对该地址的内容进行操作。,数组下标超界问题,C/C+语言不检查数组下标的超界。如定义数组 int intarray10; 合法的下标范围是0 9,但如果你引用intarray10,系统不会报错。如数组intarray 的起始地址是1000,当引用intarray10时,系统对1040号内存进行操作。而1040可能是另一个变量的地址 解决方法:由程序员自己控制。在对下标变量进行操作前,先检查下标的合法性。,数组的操作,数组的操作主要是数组元素的操作。 不能直接对数组名进行赋值。如:intarray=30 是错的。事实上,数组名中存放
5、的是该数组的起始地址。 eg. 数组的输入输出,int main() int intarray10, idx; for (idx = 0; idx intarrayidx ; cout endl; for ( idx = 0; idx = 9; +idx) cout intarrayidx; ,数组应用羊群问题,int main() double sheep10, max=0; int i, maxNum; for (i=0; i sheepi; for (i=0; imax) max = sheepi; maxNum = i; cout “最重的羊是第” maxNum “只” endl; c
6、out “它的重量是” max endl; return 0; ,使羊群问题的程序更通用,方案一:可以将羊的个数定义成一个符号常量。需要时,可以修改这个符号常量的值 方案二:定义一个足够大的数组存放羊群的信息,定义一个输入结束标志,用while循环解决这个问题。可参照分数统计程序,方案一,#define NUM 10 int main() double sheepNUM, max=0; int i, maxNum; for (i=0; i sheepi; for (i=0; imax) max = sheepi; maxNum = i; cout “最重的羊是第” maxNum “只” end
7、l; cout “它的重量是” max endl; return 0; ,数组应用,从终端输入一串字符,统计字符串中个字母出现的次数。 解决方法: 方法一:用26个整型变量计数26个字母,对输入字符串中的每一字符用switch语句分别计数。 方法二:用一个26个元素的数组,如num26, 表示计数。num0存放a的个数, num1存放b的个数。这样对每一个字符不必用switch,而只需用一个简单的计算: +numtoupper(ch) - A; 就可以了。,#include #include using namespace std; int main() int count26 = 0, i;
8、 char ch; ch = toupper(cin.get(); while (ch=A ,第5章 批量数据处理数组,一维数组 排序和查找 二维数组 字符串,排序和查找,顺序查找 二分查找 选择排序法 气泡排序法,顺序查找,被查找的数存放在一个数组中 从数组的第一个元素开始,依次往下比较,直到找到要找的元素为止。 如在一整数数组中查找元素x的存储位置。,int main() int k, x; int array = 2, 3, 1, 7, 5, 8, 9, 0, 4, 6; cout x; for (k = 0; k 10; +k) if (x = arrayk) cout k; brea
9、k; if (k = 10) cout “not found“; return 0; ,排序与查找,顺序查找 二分查找 选择排序法 气泡排序法,二分查找,数组元素已按某一顺序排序,如数字的大小顺序、字母的字母序等。以下讨论中都假设是按升序排序。 过程: 设定查找范围的上下界:lh, rh 找出中间元素的位置:mid = ( lh + rh ) / 2 比较中间元素与欲查找的元素 key。如 key 等于中间元素,则 mid 就是要查找的元素的位置;如 key 中间元素,则从 lh mid 的这些元素不可能是要查找的元素,修正查找范围为 lh = mid + 1到 rh;如key rh,则要查找
10、的元素不存在,否则返回第二步。 如在数组 CityTable 中查找元素 San Francisco 的过程如下所示。,二分查找过程,二分查找程序,int main() int lh, rh, mid, x; int array =0,1,2,3,4,5,6,7,8,9; cout x; lh = 0; rh = 9; while ( lh rh) cout “没有找到“ endl; return 0; ,搜索算法的效率,顺序搜索的平均时间性能 (1 + 2 + 3 + + n ) / n = ( n + 1 ) / 2 二分查找的最坏情况的时间性能 n / 2 / 2 / 2 / 2 = 1
11、 k=log2n,N和log2N的值,排序与查找,顺序查找 二分查找 选择排序法 气泡排序法,选择排序,使数组元素按某种次序排列 选择排序法: 在所有元素中找到最小的元素放在数组的第0个位置 在剩余元素中找出最小的放在第一个位置。以此类推,直到所有元素都放在适当的位置 用伪代码表示,int lh, rh, array; 输入要排序的元素,存入array; for (lh = 0; lh n; lh+) 在array的从lh到n 1的元素之间找出最小的放入rh; 交换下标 lh和 rh中的值; 输出排好序的元素;,选择排序实例,选择排序的完善,int main( ) int lh, rh, k,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 批量 数据处理 数组 ppt 课件
链接地址:https://www.31doc.com/p-2499565.html