当前位置:首页 » 编程语言 » c语言二分法查找

c语言二分法查找

发布时间: 2022-06-13 01:58:23

1. c语言编程中什么是二分法

先把数据排序,然后把目标数值与中间的数值相比较,根据中间数值是大于、小于、等于三种情况变化数列的首尾指针,构成新数列,再取新数列的中间数与目标值比较,如此反复。。。

2. C语言中怎样利用折半查找法(二分查找法)找到数列中的一个数

根据需求,用二分法查找指定数组中的指定数字,代码如下:
#include <stdio.h>
// 在长度为len的数组a中寻找n,找到就返回数组下标,没找到就返回-1
int search(int a[], int len, int n)
{
int index = -1;
int left = 0, right = len, mid = (left + right) / 2;

while (left <= right)
{
if (n == a[mid])
{
index = mid;
break;
}
elseif (n > a[mid])
{
left = mid + 1;
mid = (left + right) / 2;
}
else
{
right = mid - 1;
mid = (left + right) / 2;
}
}

return index;
}
int main()
{
int array[] = {5, 8, 13, 17, 23, 25, 29, 50, 53}; // 数组
int length = 9; // 数组长度
int aim = 17; // 查找目标

// 输出查找结果, Search 17 in array[]: 3
printf("Search %d in array[]: %d\n", aim, search(array, length, aim));

return0;
}

3. 怎么用C语言求二分法

二分法查找有一个前提,数据应该是排好序的,假设从小到大排列,则:
首先用中间那个数(也可以不是正中间,差一两位没有关系,只要保证不忽略数据就行)与查找值比较,大于查找值就跳到左边。
然后重新设定新的数列。新的数列为,从最小的数值到中间那个数。
以这个新的数列为基础,重复以上步骤。

4. 谁能用c语言帮我写个二分法的查找程序

#include<stdlib.h>
void
sort(int
a[],int
n){
/*排序函数,要使用二分法查找就必须对数组进行排序*/
int
i,k;
for(i=0;i<n;i++){
int
min=i;
for(k=i+1;k<n;k++)
if(a[min]>a[k])min=k;
if(i!=min){
a[min]+=a[i];/*这里是运用加减法交换两个数*/
a[i]=a[min]-a[i];
a[min]-=a[i];
}
}
}
int
find(int
a[],int
n,int
key){/*二分法查找;参数:数组名,数组长度,查找关键字*/
int
min=0,max=n-1;/*二分法查找头尾变量*/
while(min<max){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/
int
cen
=
(min+max)/2;
if(a[cen]==key)
return
cen;/*如果查到,则返回关键字在排序数组的下标*/
if(cen==min
||
cen==max)break;/*如果中间变量等于头尾任一个变量,同样查找失败*/
if(a[cen]>key)
max=cen;
else
min=cen;
}
return
-1;
}
void
main(){/*主程序只是为了证明两个函数的可行性,可以自己编写*/
int
a[]={14,10,25,36,87,95,10,12,13,8},i;
sort(a,10);
i=find(a,10,11);
if(i!=-1)
printf("be
found");
else
printf("no
found");
getch();
}

5. C语言中二分法的具体程序是什么呢

举个例子:
//二分查找法//
#
include
void
main()
{
int
a[16],i,num,flag=0,top,bottom,mid;
//定义一个一维数组a[16]用来存放供查找用的数据,但只用a[1]——a[15]//
//num用来放要查找的数据,flag是表示是否找到的开关变量,top表示查找的起始位置,bottom表示查找的终止位置,mid表示top与bottom的中间位置//
char
goon;
//变量goon为'y'或'Y'时表示继续下一轮查找,否则终止程序//
printf("请输入第1个数字:\n");
scanf("
%d",&a[1]);
//依次输入第二到第十五个数,并要求输入的数递减//
for(i=2;i<=15;i++)
{
printf("请输入第%d个数字:\n",i);
scanf("
%d",&a[i]);
if(a[i]>=a[i-1])
{
printf("请再次输入,它应该比上一个数小:\n");
scanf("
%d",&a[i]);
}
}
//输出刚才输入的数//
printf("你刚才输入的数是:\n");
for(i=1;i<=15;i++)
printf("
%d",a[i]);
printf("\n");
//查找循环开始//
do
{
printf("现在请输入你要查找的数:\n");//输入想要查找的数//
scanf("
%d",&num);
top=15;
bottom=1;
mid=15/2+1;
if(num>a[1]
||
num
0)//如果在规定的范围内,开始二分法查找//
{
if(num==a[mid])//找到所需数据,退出本层循环//
{
printf("你所要查找的数字是第%d个。\n",mid);
flag=1;
}
else
if(num>a[mid])//如果要查找的数据比a[mid]大,在前半数组查找//
{
top=mid+1;
mid=(top+bottom)/2;
}
else
//如果要查找的数据比a[mid]小,在后半数组查找//
{
bottom=mid-1;
mid=(top+bottom)/2;
}
}
if(flag==0)//如果未找到数据,输出找不到的信息//
printf("无法找到你要找的数字!\n");
printf("是否继续查找?(Y/N):\n");//询问是否开始下一轮查找//
scanf("
%c",&goon);
}while(goon=='y'
||
goon=='Y');
}

6. C语言如何用二分法查找一个数.我要一个例题

//二分法查找一个数,原数列必须是有序的,
//有个问题,当数列中有相同的数怎么处理,也就是只找到其中一个

void binsrch( int m[N],int k){
int low,high,mid;
low=0;high=N-1;
while (low<=high){
mid=(low+high)/2;
if (k>m[mid])
high=mid-1;
if (k<m[mid])
low=mid+1;
if (k==m[mid]){
printf("找到此数在数组的%d位,值为%d",mid+1,k);
return;
}

}
printf("没有找到此数,非常报歉");
return;

}

7. C语言 二分法查找的问题请大家帮我解惑。

最坏的情况应该是log2n向下取整+1,这也是折半查找判定树(完全二叉树)的树高。
第一,题目不严谨,这个折半查找可以向上或向下取整(大部分参考书上默认用向下取整来讲解),向下取整当然是花4次找到8,而向上取整是3次。
第二,最后剩下一个数的时候,那个数还需不需要比较,从代码层面来看,不能简单认为最后剩下的一个数就是所找的数,因为那个数可能并不在序列中,所以最后一次也应该比较。折半查找判定树也是这么定义的,所查找数字所在层的树高即比较次数。
至于那个结论,最坏情况下需要比较的次数,是一个等价无穷小的结论而已。因为比较次数是一个整数,结果可能是个小数,如果那个是最坏比较次数的具体答案的话,它还会指明它是向上取整还是向下取整。

8. C语言二分法查找

二分法查找又称折半查字法;
思路是.恩!
举例吧0,1,2,3,4,5,6,7,8中找5取数组中的一半也就是地五个4与5比较,如果4>5(就是中间的那个数比要找的那个大,那么就取那个数之前的那部分);如果4<5(就是中间的那个数比要找的那个小,就取那个数只后的那部分);如此循环下去;
不好意思,语文没学好,表达不清楚

9. c语言中的二分法查找是什么

是一种数据处理的算法。常用与排序。
例如
int
a,b=4,calc;
int
sum[]={1,2,3,4,5,6,7,8,9};
//这样一个数组
scanf(a);
for(calc=0;calc<9;calc++)
{
if(a<sum[b])
{
b=b/2;
if(a<sum[b])
{
printf("这个数按照升序排序位置是在"
,
b+1);
}
}else
{
b=b*2;
if(a<sum[b])
{
printf("这个数按照升序排序位置是在",b+1);
};
};
};
取一段数的中间数,来与已知的数来比较。来确定在数的前方还是后方,再重复以上比较。最后确定在一列排序完成的数集合中的位置。
【写的存在问题。】因为在考试,时间有限。

10. C语言二分法查找key值解析

#include<stdio.h>


void main()


{ int a[10]={9,16,25,32,2,1,29,81,36,21};


int key,low=0,high=10-1,mid,k=-1;


int i,j,t;


printf(" please input:");


scanf("%d",&key);


for(i=0;i<10;i++)


{for(j=0;j<10-i;j++)

热点内容
在配置更新的时候没电关机怎么办 发布:2024-05-18 20:36:10 浏览:927
win7访问win2000 发布:2024-05-18 20:27:41 浏览:387
青岛人社局密码多少 发布:2024-05-18 20:19:10 浏览:733
无法存储呼叫转移 发布:2024-05-18 20:18:30 浏览:126
数据库的调优 发布:2024-05-18 20:18:29 浏览:345
sqlserver注册表清理 发布:2024-05-18 20:13:14 浏览:991
linux删除连接 发布:2024-05-18 20:06:56 浏览:821
linux搭建云服务器平台 发布:2024-05-18 19:52:21 浏览:402
安卓怎么关闭美易订阅 发布:2024-05-18 19:29:16 浏览:643
苹果手机配置代理服务器怎么开 发布:2024-05-18 19:29:07 浏览:231