数组应用--查找(课时3)
来源:互联网 发布:手机苏戴斯诵读软件 编辑:程序博客网 时间:2024/06/05 11:07
1.①顺序查找法(在一列数中查找某数x)
基本思想:一列数放在数组a[1]---a[n]中,待查找的数放在x中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a[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,把key与a数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败。(查找子过程如下。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。用变量bot、top、mid分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下:
(1)x=a(mid),则已找到退出循环,否则进行下面的判断;
(2)x<a(mid),x必定落在bot和mid-1的范围之内,即top=mid-1;
(3)x>a(mid),x必定落在mid+1和top的范围之内,即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");
}
- 数组应用--查找(课时3)
- 数组应用--常用排序(课时2)
- 课时24—课时30 | Java 数组对象的创建和应用
- Excel 数组特辑班--课时3
- JavaEE之第七课时(二维数组)
- 提高第21课时,实践3,有序数组中插入数据 (第2种方法)
- 一位数组的应用--查找
- 二分查找应用-旋转数组
- c语言二维数组与指针(课时4)
- JavaEE之第六课时(一维数组)
- 精通JavaScript开发课时12(DOM操作应用)笔记
- H5基础第三课时(3)
- 面试题:循环数组查找数(二分查找的扩展应用)
- html5第三课时,标签应用。
- html5第七课时,内边距应用。
- 二维数组中的查找(数组 查找)
- 1.数组---查找 2.数组--二分查找法 3.数组--二分查找法的应用
- 黑马程序员----------java基础知识(6)之数组查找和二维数组及其应用
- PowerDesigner的安装及破解
- JavaScript中判断对象类型的种种方法
- 生产者和消费者 2例
- 【动态】CStatic显示图片
- 数组应用--常用排序(课时2)
- 数组应用--查找(课时3)
- 读写者问题
- UVA - 10795 A Different Task 汉诺塔
- 二叉树的计数
- CSS对话框特效 兼容性好
- Sicily 1077 Cash Machine && POJ 1276
- C语言--链表基本操作(课时5)
- 复制指定类型文件
- 多线程的几种同步特点