资源描述:
《第9章 数组应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章数组的应用1数组元素的查找数组元素的排序数组元素的插入数组元素的删除9.1数组元素的查找29.1.1无序数组元素的查找例9.1已有宏定义SIZE为100,对数组a中查找是否存在值为20的元素.已知数组:a[SIZE]={10,12,14,16,18,20,13,14,134,59};找到,则输出其元素所在的下标值,并统计次数的个数.如找不到,则输出“此数组中没有此数”.3#include#defineSIZE100voidmain(){inta[SIZE],i,n,m,k=0;printf("请输入数组元素的个数:");scanf("%d",&n);
2、printf("请输入数组元素");for(i=0;i3、异数据的查找.由于各元素互异,采用遍历查找,已知数组:a[SIZE]={10,12,14,16,18,20,13,14,134,59},查找数组a中是否含元素值为12的元素。Ch9_9_2.c6#include#defineSIZE11voidmain(){inta[SIZE]={10,12,14,16,18,20,13,14,134,59};intx,i=0;printf("输入查找的数:");scanf("%d",&x);a[SIZE-1]=x;while(a[i]!=x)i++;if(i4、i);elseprintf("此数组无此数");}Ch9_9_2.c条件是:a[i]!=x当找到x后,退出循环.将a[10]赋值为x.7例9.3在有序排列的数组中查找某数,可采用折半查找法,这是效率比较高一种方法,基本思路如下:9.1.2有序数组的查找在表列中查一个数最简单的方法是从第一个数开始查找,一一比较.但这种方法效率低:如果表列中有1000个数,且要找的数刚好在最后一个,那么要比较1000次.平均也要500次.8若输入一个数3,想查3是否在数列中.先找出表列中居中的数,即a[5].将要找的数3与a[5]比较,a[5]>3,显然3在a[1]~a[5]之间,这样就可甩掉
5、a[6]~a[9]这一部分.假设已有按小到大排好的9个数,a[1]~a[9]:a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]1357911131517...其值如下:9再将3与a[1]~a[3]之间的居中数a[2]比较,这时数3刚好等于a[2],查找到此结束.再找a[1]~a[5]之间的居中数,即a[3],将要找的数3与a[3]比较.发现a[3]>3,显然3在a[1]~a[3]之间,这样又可甩掉一半.a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]1357911131517...10例9.3现有降序排列的数组:a[SIZE]={
6、200,153,120,115,100,98,76,70,68,60,-90,-312};要查找值为68的元素,如果找到,输出其下标,否则输出无此数.共12个数据.11#include#defineSIZE12voidmain(){inta[SIZE]={200,153,120,115,100,98,76,70,68,60,-90,-312};intm,found=0;intlow=0,high=SIZE-1,mid;printf("输入查找的数:");scanf("%d",&m);….Ch9_9_3.chighlow现设输入:68found是否查找到的标记.
7、12while((low<=high)&&(found==0)){mid=(low+high)/2;/*确定中间位置*/if(ma[mid])high=mid-1;elsefound=1;}if(found==1)printf("此数组中已找到数%d,它的下标为%d",m,mid);elseprintf("此数组中没有所查找的数");}{200,153,120,115,100,98,76,70,68,60,-90