当前位置:首页 » 编程语言 » c语言二分查找
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言二分查找

发布时间: 2022-02-11 18:26:11

c语言二分查找法

#include <stdio.h>

int binfind(int val[] , int num , int value)
{
int start = 0;
int end = num - 1;
int mid = (start + end)/2;
while(val[mid] != value && start < end)
{
if (val[mid] > value)
{
end = mid - 1;
}
else if (val[mid] < value)
{
start = mid + 1;
}
mid = ( start + end )/2;
}
if (val[mid] == value)
return mid;
else
return -1;
}

int main()
{
int nums[] = {1 , 3 , 4 ,7 ,8 , 12 ,45 ,67 ,97 ,123 ,456 ,675 ,1111 , 4534 , 4563};
int result = binfind(nums , sizeof(nums) / sizeof(nums[0]) , 45);
if (result < 0)
{
printf("查无此数");
}

}

② C语言二分查找运用指针

1.你以为是传一个数组a[]对吧。其实这里将一个指针p指向这个数组a,这时候p和a是一样的。只是用指针形式比较严谨,这里用a[]也没关系,因为两者是一样的。
2。b[14]
=
{0},是把整个数组初始化所有元素都为0,注意只有写成0是这样的,如果写成b[14]={1},那么只有b[0]也就是b的第一个元素是1,其它的是任意的
3。输出地内容是传入数组a中值和key一样的元素的下标,如果找不到就返回0。
为什么?这是二分法查找的核心呀。二分法查找的数组必须是排好序的.
比如
1
3
7
8
9
10
15那么
你要搜一个数3,首先就从中间开始搜,那么
比中间这个数大的就会在右边,小的在左边,这样
每次查找都会让区间缩小一半,这就是二分法查找的核心。具体的你可以去搜一下二分查找。这就不再多言了。

③ c语言。利用二分查找法实现一维数组的查找

简单的一个:

intbinary_search(inta[],intlow,inthigh,intkey){
intmid;
while(low<=high){
mid=(low+high)/2;
if(a[mid]==key){
returnmid;
}
elseif(a[mid]>key){
high=mid-1;
}
else{
low=mid+1;
}
}
return-1;
}

④ c语言编程二分查找

好久不写了

写一个程序,建立N元整型数组,然后输入查找的整数x,查找x是否包含在数组中,查找用函数实现,若查找成功,返回x在数组中的第一次出现的下标,查找失败,返回-1

源程序:
#include"stdio.h"
#define N 10
int locate(int a[N],int x)
{int h,r,m;
h=0;r=N-1;m=(h+r)/2;
while(h<=r&&x!=a[m])
if(x<a[m]) {r=m-1;m=(h+r)/2;}
else {h=m+1;m=(h+r)/2;}
if(h>r) return -1; /*查找失败,返回-1*/
return m; /*查找成功,返回有效下标m */
}
void upinsert(int a[],int i) /*插入排序 (升序)*/
{int x,j;
x=a[i];j=i-1;
while(j>=0&&a[j]>x) {a[j+1]=a[j];j--;}
a[j+1]=x;
}
void main()
{int a[N],x,k,n;
printf("input %d integers:\n",N);
for(k=0;k<N;k++) {scanf("%d",a+k);upinsert(a,k);}
printf("input x=") ;scanf("%d",&x);
n=locate(a,x);
for(k=0;k<N;k++) printf("%4d",a[k]);
printf("\n fist position=%d\n",n);
}

没有错误,我试过了

⑤ 二分查找 C语言

这最后一个语句写错了:
printf("您输入的数组是");for(i=0;i<n;i++){printf("%d",&a[i]);}
应该是:
printf("您输入的数组是");for(i=0;i<n;i++){printf("%d ",a[i]);} //要有空格,不要有取地址符

⑥ C语言二分查找

if(key==a[mid]) return mid; 这句就是罪魁祸首。呵呵你是想用return来结束while循环吧。用错了。
找到结果后,你应该是把结果输出出来,而不是用return。return语句是返回整个函数的,在你的程序里main函数就结束了,你当然看不到任何结果了。
改为:
if(key==a[mid]) break; *这行是结束while循环的。而不是你所用的return*/
}

⑦ C语言的二分查找

#include <stdio.h>
#include <stdlib.h>

int search(int* a, int key)
{
int low = 0;
int high = 14;
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (key == a[mid])
return mid;
else if (key < a[mid])
high = mid - 1;
else
low = mid + 1;
}
return 0;
}

int main()
{
int* a, key, i = 0;
int b[15] =
{
0
};
a = b;
printf("please input all the 15 data(from small to big) \n ");
for (i = 0; i < 15; i++)
{
scanf("&d", &b[i]); //这里是b[i]
printf("\n");
}
printf("please input the key");
scanf("%d", &key);
if (!search(a, key))
printf("there is no data you are searching for \n");
else //这个else不能少,不然你怎么运行都会输出下面的语句
{
printf("the data you are searching for is in the %dth place\n",
search(a, key));
}
getchar();
return 0;
}

⑧ 二分查找C语言

你的错误挺多的,首先是忘了定义int x;

其次是对strlen()函数的用法错了,你的数组s[]是整型,但是strlen(char*ch),括号里的只能写字符型数组的变量名,你要求整型数组的长度可以这样求n=sizeof(s)/sizeof(int);

最后一个也是挺致命的错误就是Bsearch()函数里的while循环应该是while(low<=high),而不是while(low<high);以及对break的使用,你也用错了,break是跳出循环的意思,你用在这里就是不执行while的意思,如果你非要用的话应该是continue,然而事实上你什么也不写就好了。具体代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intBsearch(ints[],intx,intn);
intmain(void)
{
inti;
intn;
intx;//这里你没写
ints[10]={1,2,3,4,5,6,7,8,9,10};
n=sizeof(s)/sizeof(int);//这里应该改成这样
printf("%dpleaseinputx:",n);
scanf("%d",&x);
i=Bsearch(s,x,n);//这里不要写成s[]
printf(" %d",i);
system("pause");
return0;
}
intBsearch(ints[],intx,intn)
{
intlow,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(s[mid]>x)
{
high=mid-1;
continue;//这行不写也行,下面也是
}
elseif(s[mid]<x)
{
low=mid+1;
continue;
}
else
{
returnmid;
}
}
return-1;
}

⑨ 用C语言写二分查找的代码!!!

推荐答案的 code 有问题,并没有考虑到若待查数的下标是 0 怎么办?所以若顺序表中不存在待查元素应该 return-1

加上主函数的最后两行调用两次查找函数很多余,代码显得不够简练。

建议改成:

#include<stdio.h>
#include<stdlib.h>

intSearch(int*a,intkey)
{
//在顺序表中折半查找key的数据元素。若找到,则函数值为
intlow=0,mid;//该元素的数组下标;否则为0。
inthigh=14;
while(low<=high)
{
mid=(low+high)/2;
if(key==a[mid])
returnmid;//找到待查元素
elseif(key<a[mid])
high=mid-1;//继续在前半区间进行查找
else
low=mid+1;//继续在后半区间进行查找
}
return-1;//顺序表中不存在待查元素
}
voidmain()
{
int*a,key,i;
intb[15]={0};
a=b;

printf("请自小到大输入15个整数: ");
for(i=1;i<=15;i++)
{
scanf("%d",&b[i-1]);
printf(" ");
}
printf("请输入你要查找的数: ");
scanf("%d",&key);
i=Search(a,key);
if(-1==i)
printf("你要查找的数不在目标数组中! ");
else
printf("你要查找的数的数组下标为%d ",i);
}