如果是无序的,需要排序
#include <stdioh>int binSearch(int, int, int);
main()
{
int i, n = 10, x = 7;
int a[10];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//排序略
binSearch(x,a,n));
return 0;
}
int binSearch(int x, int a[], int n)
{
int low, high, mid;
low = 0;
high = n-1;
while(low <= high)
{
mid = (low + high) / 2;
if(x < a[mid])
high = mid - 1;
else if(x > a[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
#include
<stdioh>
void
main()
{
float
x0,x1,x2,fx0,fx1,fx2;
do{
printf("enter
x1
&
x2:");
scanf("%f,%f",&x1,&x2);
fx1=(x1(2x1-4)+3)x1-6;
fx2=(x2(2x2-4)+3)x2-6;
}while(fx1fx2>0);
/如果f(x1),f(x2)同号,则在[x1,x2]区间无实根,重新输入x1,x2
/
do{
x0=(x1+x2)/2;
/求x1和x2间的中点:x0=(x1+x2)/2
/
fx0=(x0(2x0-4)+3)x0-6;
if((fx0fx1)<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=%63f\n",x0);
/输出x0/
}
给你写个递归吧:
int binarySearch(int val,int array[],int n){
int m=n/2;
if(n<=0)return NULL;
if(val==array[m])return array+m;
if(val<array[m])return binarySearch(val,array,m);
else return binarySearch(val,array+m+1,n-m-1);
}
这个是使用临时数组
#include<stdioh>
char insert(char p1,char p2)
{
char temp[1024]={0},p=temp;
while(true){
if(p1=='\0' && p2=='\0') break;
if(p1!='\0'){p=p1;p++;p1++;}
if(p2!='\0'){p=p2;p2++;}
p++;
}
return temp;
}
main()
{
char s1[256]={0},p1=s1;
char s2[256]={0},p2=s2;
char p;
scanf("%s",p1);
scanf("%s",p2);
p=insert(p1,p2);
printf("%s\n",p);
}
好久不写了
写一个程序,建立N元整型数组,然后输入查找的整数x,查找x是否包含在数组中,查找用函数实现,若查找成功,返回x在数组中的第一次出现的下标,查找失败,返回-1
源程序:
#include"stdioh"
#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语言,二分法查找无序的一维数组中的一个元素,输出其位置全部的内容,包括:C语言,二分法查找无序的一维数组中的一个元素,输出其位置、C语言 二分法查找问题、求解C语言二分法查表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)