C语言,二分法查找无序的一维数组中的一个元素,输出其位置

C语言,二分法查找无序的一维数组中的一个元素,输出其位置,第1张

如果是无序的,需要排序

#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语言二分法查表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9601995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存