C语言调用函数折半查找 折半查找函数C语言

C语言 指针和函数编程实现折半查找算法

// 二分法查找算法

成都创新互联公司成都网站建设按需求定制开发,是成都网站维护公司,为塑料袋提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站设计热线:028-86922220

int binary_search(int arr[],int *top,int *bot,int x){

if (*bot = *top){

int index= *top + (*bot - *top) / 2;

int *mid = index;

if (arr[*mid] == x) return *mid;

if (arr[*mid]  x) { // x在左侧

*mid = *mid - 1;

return binary_search(arr, top, mid, x);

}

else{ // x在右侧

*mid = *mid+1;

return binary_search(arr, mid, bot, x);

}

}

return -1;

}

void main()

{

int a[10] = { 1, 3, 5, 7, 8, 9, 12, 13, 15, 17 };

int n = sizeof(a) / sizeof(a[0]), x = 13, t = 0;

int *top = t, *bot = n;

*bot = *bot - 1;

int index = binary_search(a, top, bot, x);

if (index = 0){

printf("%d在数组索引为[%d]的位置\n", x, index);

}

else{

printf("%d在数组中不存在!\n", x);

}

}

c语言编程实现“折半查找”的过程。

//参考代码如下:

#include stdio.h

int main()

{

int i, j, n, k=0, isFound=0;

int num[15] = {88,86,75,74,61,56,52,43,39,34,31,22,18,16,8}; //测试数组

printf("请输出一个整数:\n");

scanf("%d", n);

i = (int)15/2; //对折位移量

j = (int)15/2; //取数“指针”

while(k2)

{

i = (int)i/2;

if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数

//若未相等,计算下一循环指针的位置

if(nnum[j])

j = j + (i + 1);

else if(nnum[j])

j = j - (i + 1);

else

{

isFound = 1;

break; //若找到相等数,标记已找到并退出循环

}

}

//输出结果

if(isFound)

printf("该数是数组中第%d个元素的值\n", j);

else

printf("查无此数!\n");

return 0;

}

用c语言实现折半查找

#includestdio.h

int find(int a[],int x,int n,int m)

{int i;

if(nm)return -1;

i=(n+m)/2;

if(a[i]==x)return i;

if(a[i]x)return find(a,x,n,i-1);

return find(a,x,i+1,m);

}

int main()

{

int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,51};

int x,i;

printf("已有的数是:\n");

for(i=0;i20;i++)

printf("%d ",a[i]);

printf("\n请输入要查找的数:");

scanf("%d",x);

if((i=find(a,x,0,19))=0)

printf("%d是第%d个数\n",x,i+1);

else printf("未找到%d\n",x);

return 0;

}

C语言实现折半查找

#include stdio.h

int look_up(int a[],int n,int x)

{

int left=0,right=n-1,mid;

while(left=right)

{

mid=(left+right)/2;

if(x==a[mid])

return mid+1;  //加一后才是它的逻辑位序 

else if(xa[mid])

right=mid-1;

else

left=mid+1;

}

if(leftright)

return -1;

}

int main()

{

int a[100],n,x,i,result;

scanf("%d",n);

for(i=0;in-1;i++)

scanf("%d,",a[i]);

scanf("%d",a[i]);

scanf("%d",x);

result=look_up(a,n,x);

if(result=0)

printf("%d\n",result);

else

printf("No\n");

}

c语言折半查找

/*折半查找递归函数,如果查找成功,函数返回关键字所在位置,否则返回-1*/

/* s为有序数列,a、b分别为查找区间的起点和终点,key为查找关键字 */

int half(int s[],int a,int b,int key)

{

int mid;

if(a==b)

if(key==s[a]) return (a);

else return (-1);

else

{

mid=(a+b)/2;

if(keys[mid]) return(half(s,a,mid,key));

if(keys[mid]) return(half(s,mid+1,b,key));

if(key==s[mid]) return (mid);

}

}

这是折半查找的递归算法,应该是你说的意思!!


本文名称:C语言调用函数折半查找 折半查找函数C语言
文章路径:http://myzitong.com/article/dosojsp.html