❶ 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;
}
❷ C语言二分法查找
#include <stdio.h>//不用math头文件
void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};//hing和low赋初值
scanf("%d",&k);
while (high>=low)//>=
{
m=(high+low)/2;
if(k<a[m]) high=m-1;//比较的是数值而不是下标
else if(k>a[m]) low=m+1;
else
{
printf("yes");
return;//这两句地方放错了
}
}
printf("no");
return;//if语句去掉
}
❸ 谁能用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();
}
❹ C语言编程中什么是二分法
二分法查找,比如要从100个元素里找a元素,那么先分成两组,每组50,搜索一组,如果没有就将另一组分成两组25个,
再继续查找,每次搜索结束都将数目均分为两份
❺ 怎么用C语言求二分法
二分法查找有一个前提,数据应该是排好序的,假设从小到大排列,则:
首先用中间那个数(也可以不是正中间,差一两位没有关系,只要保证不忽略数据就行)与查找值比较,大于查找值就跳到左边。
然后重新设定新的数列。新的数列为,从最小的数值到中间那个数。
以这个新的数列为基础,重复以上步骤。
❻ 如何用c语言的二分法查找从键盘输入的任一个数是否在有序数列中
我运行过了,没错,基本符合你的要求,你可以试试看。
#include
<stdio.h>
#define
N
10
void
main()
{
int
i,number,top,bott,mid,loca,a[N],flag=1,sign;
char
c;
printf("请输入10个数字:\n");
scanf("%d",&a[0]);
i=1;
while(i<N)
{scanf("%d",&a[i]);
if(a[i]>=a[i-1])
i++;
else
printf("输入数字顺序不是由小到大请重输:\n");
}
printf("\n");
for(i=0;i<N;i++)
printf("%2d",a[i]);
printf("\n");
while(flag)
{printf("请输入要查找的数字:");
scanf("%d",&number);
sign=0;
top=0;
bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((!sign)&&(top<=bott))
{mid=(bott+top)/2;
if(number==a[mid])
{loca=mid;
printf("在数组中发现数字
%d,在数组中该数字是第%d位\n",number,loca+1);
sign=1;
}
else
if(number<a[mid])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==-1)
printf("在数组中没有数字
%d.\n",number);
}
}
❼ C语言 二分法查找问题
#include
<stdio.h>
void
main()
{
float
x0,x1,x2,fx0,fx1,fx2;
do{
printf("enter
x1
&
x2:");
scanf("%f,%f",&x1,&x2);
fx1=(x1*(2*x1-4)+3)*x1-6;
fx2=(x2*(2*x2-4)+3)*x2-6;
}while(fx1*fx2>0);
/*如果f(x1),f(x2)同号,则在[x1,x2]区间无实根,重新输入x1,x2
*/
do{
x0=(x1+x2)/2;
/*求x1和x2间的中点:x0=(x1+x2)/2
*/
fx0=(x0*(2*x0-4)+3)*x0-6;
if((fx0*fx1)<0){ /*如f(x0)与f(x1)不同号,把x0赋给x2,把f(x0)赋给f(x2)*/
x2=x0;
fx2=fx0;
}
else{ /*否则,把x0赋给x1,f(x0)赋给f(x1)*/
x1=x0;
fx1=fx0;
}
}while(fabs(fx0)>=1e-5);/*判断f(x0)的绝对值是否小于某一个指定的值(如10的负5次方)*/
printf("x=%6.3f\n",x0);
/*输出x0*/
}
❽ 顺序表的排序,二分法查找的c语言程序
#include<stdio.h>
int fun(int a[],int n,int key)
{i
nt low,mid,high;//low、mid、high是三个索引分别指向数组的下标low=0;//low指向数组a[]的第一个元素,即下表为0的元素
high=n-1;//lhigh指向数组a[]的最一个元素,即下表为n-1的元素,n为数组的长度
while(low<=high)//循环终止条件是low>high的时候
{
mid=(low+high)/2;//所谓二分查找就在这里,每次都让mid指向数组下标等于low和high之和的一半的元素i
f(key<a[mid])//如果a【mid】大于要查找的元素,说明要查找的元素在low和mid之间,这是需要把high重新置为mid-1
(high=mid-1);//这里应该是{},不能使()吧
else if(key>a[mid])//这里同理,如果a【mid】小于要查找的元素,说明要查找的元素在mid和high之间,这是需要把low重新置为mid+1
(low=mid+1);
else
return mid;//剩下的就是相等的情况,直接返回mid就是查找到的结果
}
return -1;//执行到这一步就说明,low>high,没有找到要查找的元素,返回-1表示没有结果
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int a,b,c;
b=4;
c=fun(a,10,b);
if(c==1)
printf("not found");
else
printf("psition %d\n",c);
}
❾ C语言中二分法查找问题
就按这个例子来说吧left = 1 right =6 mid = (left+right)/2=3就是先比较103和5 103>5 left=mid+1=4 right = 6mid= (4+6)/2=5比较103 103 相等 退出