第5章 批量数据处理数组.ppt
《第5章 批量数据处理数组.ppt》由会员分享,可在线阅读,更多相关《第5章 批量数据处理数组.ppt(65页珍藏版)》请在麦多课文档分享上搜索。
1、第5章 批量数据处理数组,一维数组 排序和查找 二维数组 字符串,一维数组,有时,我们需要存储一批同类型的数据,如有十只羊,主人要保存每只羊的重量,并从中挑选一只最肥的羊。 解决方案:可以定义十个double型的变量sheep1, ,sheep10,然后比较十个值,找出一个最大值。 缺点: 定义了十个变量。要是有100只羊就要定义100个变量 程序只能用顺序结构 如果羊群规模发生变化,程序就得重写,数组,数组是保存一组同类元素的数据类型,它有两个特征: 数组元素是有序的 数组元素是同类的 定义数组要定义三个基本内容: 数组名字 数组元素的类型 数组的大小,数组的定义,格式:类型 数组名元素个数
2、;其中,元素个数必须是常量。如:int intarray10;但 int n=10;int intarrayn; 是错的 常用的方法是将元素个数定义为一个常量。如:#define NumOfElement 10int intarrayNumOfElement; 相当于int intarray10;,初始化,定义数组时可以对数组初始化float x5 = -1.1, 0.2, 33.0, 4.4, 5.05 ; 初始化表的长度短于要被初始化的数组元素数目,那么剩余元素被初始化为0。 带有初始化的数组可以不定义数组规模,编译器根据初值的个数决定数组的大小int a=1,2,3,4,5; 则默认数组
3、大小为5,初始化表,数组元素,数组元素的使用是通过数组名及元素的序号来指定,如intarray2。当数组的大小为n时,元素的序号为0 n-1。 元素的序号称为下标。程序中,下标可为整数、整型变量或结果为整型的任意表达式。正是这一特性,使得数组的应用非常灵活。,数组在内存中,定义数组就是定义了一块连续的空间,空间的大小等于元素数*每个元素所占的空间大小。 数组元素按序存放在这块空间中。,为数组分配空间,如: int intarray5;占用了20个字节,因为每个整型数占四个字节。如给intarray3赋值为3,如果这块空间的起始地址为100,那么在内存中的情况是:当你引用变量intarrayid
4、x时,系统计算它的地址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;cout “它的重量是” max endl
6、;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 “只” endl;cout “它的重量是” max endl;r
7、eturn 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;char ch;ch = toupper(cin.get(
8、);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; break;if (k = 10) cout “not found“;retur
9、n 0; ,排序与查找,顺序查找 二分查找 选择排序法 气泡排序法,二分查找,数组元素已按某一顺序排序,如数字的大小顺序、字母的字母序等。以下讨论中都假设是按升序排序。 过程: 设定查找范围的上下界:lh, rh 找出中间元素的位置:mid = ( lh + rh ) / 2 比较中间元素与欲查找的元素 key。如 key 等于中间元素,则 mid 就是要查找的元素的位置;如 key 中间元素,则从 lh mid 的这些元素不可能是要查找的元素,修正查找范围为 lh = mid + 1到 rh;如key rh,则要查找的元素不存在,否则返回第二步。 如在数组 CityTable 中查找元素 S
10、an 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 = 1k=log2n,N和log2N的值,排序与查找,顺序查找 二分查找 选择排序法 气泡排序法
11、,选择排序,使数组元素按某种次序排列 选择排序法: 在所有元素中找到最小的元素放在数组的第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, tmp;int array = 2, 5, 1, 9, 10, 0, 4, 8, 7, 6;for
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 批量 数据处理 数组 PPT
