int x 2 y 1 z 5y=15;

二分查找_百度百科
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的,使查找成功,或直到子表不存在为止,此时查找不成功。
二分查找算法要求
2.必须按关键字大小有序排列。
二分查找算法复杂度
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x&a[n/2],则只要在数组a的左半部分继续搜索x,如果x&a[n/2],则只要在数组a的右半部搜索x.
时间复杂度无非就是while循环的次数!
总共有n个元素,
渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数
由于你n/2^k取整后&=1
即令n/2^k=1
可得k=log2n,(是以2为底,n的对数)
所以时间复杂度可以表示O(h)=O(log2n)
下面提供一段二分查找实现的:
BinarySearch(max,min,des)
mid-&(max+min)/2
while(min&=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid &des then
return max
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x&a[n/2],则我们只要在a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x&a[n/2],则我们只要在数组a的右 半部继续搜索x。
二分查找代码示例
二分查找Python源代码
def&bin_search(data_list,&val):&&&&
&&&&low&=&0&&&&&&&&&&&&&&&&&&&&&&&&&#&最小数下标&&&&
&&&&high&=&len(data_list)&-&1&&&&&&&#&最大数下标&&&&
&&&&while&low&&=&high:&&&&&&&&
&&&&&&&&mid&=&(low&+&high)&//&2&&&&&#&中间数下标&&&&&&&&
&&&&&&&&if&data_list[mid]&==&val:&&&#&如果中间数下标等于val,&返回&&&&&&&&&&&&
&&&&&&&&&&&&return&mid&&&&&&&&
&&&&&&&&elif&data_list[mid]&&&val:&&#&如果val在中间数左边,&移动high下标&&&&&&&&&&&&
&&&&&&&&&&&&high&=&mid&-&1&&&&&&&&
&&&&&&&&else:&&&&&&&&&&&&&&&&&&&&&&&#&如果val在中间数右边,&移动low下标&&&&&&&&&&&&
&&&&&&&&&&&&low&=&mid&+&1&&&&
&&&&&return&#&val不存在,&返回None
ret&=&bin_search(list(range(1,&10)),&3)
print(ret)
二分查找pascal源代码
programjjzx(input,output);
a:array[1..10]
['输入10个从小到大的数:']
for&i:=1&to&10&do&read(a[i]);
['输入要查找的数:']
readln(x);
i:=1;n:=10;j:=trunc((i+n)/2);
if&a[j]&x&then
n:=j-1;j:=trunc((i+n)/2)
else&if&a[j]&x&then
i:=j+1;j:=trunc((i+n)/2)
until(a[j]=x)or(i&=n);{为什么是这个结束循环条件——i&n表示所查找的范围已经空了(就是没找到)}
if&a[j]=x&then
writeln('查找成功!位置是:',j:3)
writeln('查找失败,数组中无此元素!')
var&a:array[1..100001]&of&
&&&&n,m,i,t:
function&search(k:longint):
var&l,r,mid:
&mid:=(l+r)&div&2;
&&while&(a[mid]&&k)&and&(l&=r)&do
&&&if&a[mid]&k&then&r:=mid-1
&&&&else&l:=mid+1;
&&&mid:=(l+r)&div&2;
&if&l&r&then&exit(0);
&exit(mid);
&readln(n,m);
&for&i:=1&to&n&do&read(a[i]);
&&for&i:=1&to&n&do
&&&read(t);
&&&if&search(t)=0&then&writeln('no')
&&&&else&writeln(search(t));
二分查找C和C++代码
int&BinSearch(SeqList&*R,int&n,KeyType&K)
&&&&//在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1
&&&&int&low=0,high=n-1,mid;&&&&&//置当前查找区间上、下界的初值
&&&&while(low&=high)
&&&&&&&&if(R[low].key==K)
&&&&&&&&&&&&return&
&&&&&&&&if(R[high].key==k)
&&&&&&&&&&&&return&&&&&&&&&&&//当前查找区间R[low..high]非空
&&&&&&&&mid=low+((high-low)/2);
&&&&&&&&&&&&/*使用(low+high)/2会有整数溢出的问题
&&&&&&&&&&&&(问题会出现在当low+high的结果大于表达式结果类型所能表示的最大值时,
&&&&&&&&&&&&&&&&这样,产生溢出后再/2是不会产生正确结果的,而low+((high-low)/2)
&&&&&&&&&&&&&&&&不存在这个问题*/
&&&&&&&&if(R[mid].key==K)
&&&&&&&&&&return&&&&&&&&&&&&&&//查找成功返回
&&&&&&&&if(R[mid].key&K)
&&&&&&&&&&low=mid+1;&&&&&&&&&&&&&&//继续在R[mid+1..high]中查找
&&&&&&&&else
&&&&&&&&&&high=mid-1;&&&&&&&&&&&&&//继续在R[low..mid-1]中查找
&&&&if(low&high)
&&&&&&&&return&-1;//当low&high时表示所查找区间内没有结果,查找失败
int&bsearchWithoutRecursion(int&array[],int&low,int&high,int&target)
&&&&while(low&=high)
&&&&&&&&&&&&int&mid=(low+high)/2;
&&&&&&&&&&&&if(array[mid]&target)
&&&&&&&&&&&&&&&&high=mid-1;
&&&&&&&&&&&&else&if(array[mid]&target)
&&&&&&&&&&&&low=mid+1;
&&&&&&&&&&&&else
&&&&&&&&&&&&&&&&return&
&&&&return-1;
int&binSearch(const&int&*Array,int&start,int&end,int&key)
&&&&&&&&int&left,
&&&&&&&&int&
&&&&&&&&left=
&&&&&&&&right=
&&&&&&&&while(left&=right)
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&mid=(left+right)/2;
&&&&&&&&&&&&&&&&&&&&if(key==Array[mid])&&return&
&&&&&&&&&&&&&&&&&&&&else&if(key&Array[mid])&right=mid-1;
&&&&&&&&&&&&&&&&&&&&else&if(key&Array[mid])&left=mid+1;
&&&&&&&&&&&&&&&&
&&&&&&&&return&-1;
递归实现(可直接编译)
#include&iostream&
#include&cstdlib&
#include&cstdio&
#include&cmath&
#include&cstring&
#include&algorithm&
using&namespace&
int&a[100]={1,2,3,5,12,12,12,15,29,55};//数组中的数(由小到大)
int&k;//要找的数字
int&found(int&x,int&y)
&&&&int&m=x+(y-x)/2;
&&&&if(x&y)//查找完毕没有找到答案,返回-1
&&&&&&&&return&-1;
&&&&&&&&if(a[m]==k)
&&&&&&&&&&&&return&m;//找到!返回位置.
&&&&&&&&else&if(a[m]&k)
&&&&&&&&&&&&return&found(x,m-1);//找左边
&&&&&&&&&else
&&&&&&&&&&&&return&found(m+1,y);//找右边
int&main()
&&&&&&&&cin&&k;//输入要找的数字c语言把cin换为scanf即可
&&&&&&&&cout&&found(0,9);//从数组a[0]到a[9]c语言把cout换为printf即可
&&&&&&&&return&0;
二分查找Java代码
public&static&int&binarySearch(Integer[]&srcArray,&int&des)&{
&&&&int&low&=&0;
&&&&int&high&=&srcArray.length&-&1;
&&&&while&((low&&=&high)&&&&(low&&=&srcArray.length&-&1)
&&&&&&&&&&&&&&&(high&&=&srcArray.length&-&1))&{
&&&&&&&&int&middle&=&(high&+&low)/2&;
&&&&&&&&if&(des&==&srcArray[middle])&{
&&&&&&&&&&&&return&
&&&&&&&&}&else&if&(des&&&srcArray[middle])&{
&&&&&&&&&&&&high&=&middle&-&1;
&&&&&&&&}&else&{
&&&&&&&&&&&&low&=&middle&+&1;
&&&&return&-1;
二分查找AAuto代码
//二分查找
functionbinSearch(t,v){
p=b+math.floor((p-b)/2)//二分折半运算
if(t[p]&v){//判断下限
}while(t[p]&v)//判断上限
returnt[p]==v&&p;
//创建数组,每个元素都是随机数
for(i=1;10;1){
tab[i]=math.random(1,10000)
//插入一个已知数
table.push(tab,5632)
table.sort(tab)
io.print(&数组&,table.tostring(tab))
io.print(&使用二分查找,找到5632在位置:&,binSearch(tab,5632))
二分查找PHP代码
function&binsearch($x,$a){
$c=count($a);
$high=$c-1;
while($lower&=$high){
$middle=intval(($lower+$high)/2);
if($a[$middle]&$x)
$high=$middle-1;
elseif($a[$middle]&$x)
$lower=$middle+1;
return&-1;
二分查找AS3代码
publicstaticfunctionbinSearch(list:Array,low:int,high:int,key:int):int{
if(low&high)
varmid:int=low+int((high-low)/2);
varindex:int=-1
if(list[mid]==key){
}elseif(list[mid]&key){
low=mid+1;
index=binSearch(list,low,high,key);
high=mid-1;
index=binSearch(list,low,high,key);
二分查找JavaScript代码
varArr=[3,5,6,7,9,12,15];
functionbinary(find,arr,low,high){
if(low&=high){
if(arr[low]==find)
if(arr[high]==find)
varmid=Math.ceil((high+low)/2);
if(arr[mid]==find){
}elseif(arr[mid]&find){
returnbinary(find,arr,low,mid-1);
returnbinary(find,arr,mid+1,high);
binary(15,Arr,0,Arr.length-1);
二分查找PHP代码
/*二分查找:前提,该数组已经是一个有序数组,必须先排序,再查找。*/
function&binarySearch(&$array,$findVal,$leftIndex,$rightIndex){
$middleIndex=round(($rightIndex+$leftIndex)/2);
if($leftIndex&$rightIndex){
echo'查无此数&br/&';
if($findVal&$array[$middleIndex]){
binarySearch($array,$findVal,$middleIndex+1,$rightIndex);
}elseif($findVal&$array[$middleIndex]){
binarySearch($array,$findVal,$leftIndex,$middleIndex-1);
echo&找到数据:index=$middleIvalue=$array[$middleIndex]&br/&&;
if($array[$middleIndex+1]==$array[$middleIndex]&&$leftIndex&$rightIndex){
binarySearch($array,$findVal,$middleIndex+1,$rightIndex);
if($array[$middleIndex-1]==$array[$middleIndex]&&$leftIndex&$rightIndex){
binarySearch($array,$findVal,$leftIndex,$middleIndex-1);扫二维码下载作业帮
2亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿学生的选择
int w= A ,x=14,y=15; W=((x||y)&&(w< a )); w的值?
扫二维码下载作业帮
2亿学生的选择
下面是详解过程,C语言中,关于逻辑值的问题就是,非0即为真,以问题为例,x,y都不等于0,即x,y都为真,进行“或”运算“||”时,有一个为真即为真所以x||y逻辑值为1;C语言中,有一个字符与整数想对应的ASC||码表,'a'=97,'A'=65,所以w
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 int x 1 y 0 a 0 b 0 的文章

 

随机推荐