数组应用--查找(课时3)

来源:互联网 发布:手机苏戴斯诵读软件 编辑:程序博客网 时间:2024/06/05 11:07

1顺序查找法(在一列数中查找某数x

  基本思想:一列数放在数组a[1]---a[n]中,待查找的数放在x中,把xa数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使xa[p]比较,如果x不等于a[p],则使 p=p+1,不断重复这个过程;一旦x等于a[p]则退出循环;另外,如果p大于数组长度,循环也应该停止。(这个过程可由下语句实现) 
void main() 

{ int a[10],p,x,i; 
printf("please input the array:/n"); 
for(i=0;i<10;i++) 
scanf("%d",&a[i]); 
printf("please input the number you want find:/n"); 
scanf("%d",&x); 
printf("/n"); 
p=0; 
while(x!=a[p]&&p<10) 
p++; 
if(p>=10) 
printf("the number is not found!/n"); 
else 
printf("the number is found the no%d!/n",p); 

思考:将上面程序改写一查找函数Find,若找到则返回下标值,找不到返回-1 
基本思想:一列数放在数组a[1]---a[n]中,待查找的关键值为key,把keya数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败。(查找子过程如下。index:存放找到元素的下标。
void main() 
{ int a[10],index,x,i; 
printf("please input the array:/n"); 
for(i=0;i<10;i++) 
scanf("%d",&a[i]); 
printf("please input the number you want find:/n"); 
scanf("%d",&x); 
printf("/n"); 
index=-1; 
for(i=0;i<10;i++) 
if(x==a[i]) 
{ index=i; break; 

if(index==-1) 
printf("the number is not found!/n"); 
else 
printf("the number is found the no%d!/n",index); 
}

2.折半查找法(只能对有序数列进行查找)

  基本思想:设n个有序数(从小到大)存放在数组a[1]----a[n]中,要查找的数为x。用变量bottopmid分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下: 
1x=a(mid),则已找到退出循环,否则进行下面的判断; 
2x<a(mid)x必定落在botmid-1的范围之内,即top=mid-1 
3x>a(mid)x必定落在mid+1top的范围之内,即bot=mid+1 
4)在确定了新的查找范围后,重复进行以上比较,直到找到或者bot<=top 
将上面的算法写成如下程序: 
void main() 


int a[10],mid,bot,top,x,i,find; 
printf("please input the array:/n"); 
for(i=0;i<10;i++) 
scanf("%d",&a[i]); 
printf("please input the number you want find:/n"); 
scanf("%d",&x); 
printf("/n"); 
bot=0;top=9;find=0; 
while(bot<top&&find==0) 
{ mid=(top+bot)/2; 
if(x==a[mid]) 
{find=1;break;} 
else if(x<a[mid]) 
top=mid-1; 
else 
bot=mid+1; 

if (find==1) 
printf("the number is found the no%d!/n",mid); 
else 
printf("the number is not found!/n"); 
}

 

0 0
原创粉丝点击