⼆分法查找元素的位置
⼆分法的⽤途:能在⼤量的数据中找到⾃⼰想找的元素,减少查找的循环的次数。
⼆分法的条件:是⼀个有序的序列,才能使⽤⼆分法。
⼆分法的原理:将⼀个有序数列,查找的时候利⽤中间值,来⼀步步缩⼩搜索的范围,最终找到最终结果。
1将数组长度为n的,排好序,升降序没有关系。
2先把数组的范围标记好分别⽤low,和high来表⽰数组的范围,然后找到数组的中间元素mid=(low+high)/2,和你所查找的元素
key进⾏对⽐,如果key的数值较为⼤的话,就进⼊(mid,high)的范围在进⾏查找元素,如果key的元素较为⼩的话就进⼊
(low,mid)的范围查找,每次循环这个步骤。
这时我们只需要根据key,与数组的最中间的值进⾏⽐较,根据结果改变low,high的值就好了。
看⼀下代码:这串代码的作⽤是将⼀个长为N的数组将其排序后,在查询K在排序后的位置。
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intarch(intz[],intn,intkey){//函数的功能查找元素,能代表长度,z数组名,key是要查找的元素。
intlow=1;
inthigh=n;//low,high是范围
intmid;//中间值
while(low<=high){
mid=(low+high)/2;
if(z[mid]==key)//如果找到元素之后,返回元素的位置
returnmid;
if(z[mid]>key){
high=mid-1;
}
elif(z[mid]
low=mid+1;
}
return-1;//如果没有找到就返回-1;
}
intmain()
{
intz[99];
inti,j,k,n;
cin>>n;
for(i=1;i<=n;i++){
scanf("%d",&z[i]);
}
scanf("%d",&k);
sort(z+1,z+n+1);
intflag=arch(z,i,k);//⼀个标志,看是否查找到元素
if(flag==-1)
printf("nofind");
elprintf("%dn",flag);
return0;
}
本文发布于:2023-03-06 20:44:09,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678106650162995.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:查一下我现在的位置.doc
本文 PDF 下载地址:查一下我现在的位置.pdf
留言与评论(共有 0 条评论) |