写了半天也没写好,请大家帮帮忙!

慢慢来还不行么 2005-04-09 12:11:02
用递归实现折半查找。函数的定义如下:
bool Find(* pData, iCount, iData)
...全文
143 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycom__net 2005-04-09
  • 打赏
  • 举报
回复
为什么要递归呢,
循环就可以了!1


#include <stdio.h>
#include <stdlib.h>


int Find(int *list ,int data,int size)
{
int mid,head=0,tail=size-1;
while (head<=tail)
{
mid=(head+tail)/2;
if ( list[mid] == data)
return mid;
if ( list[mid] < data)
head=mid+1;
if( list[mid] > data)
tail=mid-1;
}
return 0;
}


int main()
{
int num[10]={0,1,2,3,4,5,6,8,10,22};
int tmp;
tmp=Find (num,10,10);
printf("%d", tmp);
system("PAUSE");
return 0;
}
FlyWithJo 2005-04-09
  • 打赏
  • 举报
回复
bool Find(* pData, iCount, iData)
{
if(iCount==1)
{
if (pData[0] == iData)
return true;
else
return false;
}
int i = iCount/2;
if(pData[i]==iData)
{
return true;
}
else
{
if (Find(pData+i+1,i,iData))
return true;
else
return Find(pData,i,iData);
}
}

没有测试过,你试试看
llf_hust 2005-04-09
  • 打赏
  • 举报
回复
找不到就返回-1呀
zengwujun 2005-04-09
  • 打赏
  • 举报
回复
#include <stdio.h>
#define MAX 11
int Data[MAX]={5,13,19,21,37,56,64,75,80,88,92};
int counter=0;

bool Binary_Search(int key,int low,int high)
{
bool bFind = false;
int mid;
while(low<=high || !bFind)
{
mid=(low+high)/2;
if(key==Data[mid])
{
return true;
}

if(key<Data[mid])
{
high=mid-1;
bFind = Binary_Search(key,low,high);
}
else
{
low=mid+1;
bFind = Binary_Search(key,low,high);
}
}
return bFind;
}
void main()
{
int key=19;

if(Binary_Search(key,0,10))
printf("Found!\n");
else
printf("Not Found!\n");
}
jerry256 2005-04-09
  • 打赏
  • 举报
回复
不好意思。我自己没看清楚程序:) to IIF_hust()
jerry256 2005-04-09
  • 打赏
  • 举报
回复
IIF_hust() 如果iData查找不到呢?
jerry256 2005-04-09
  • 打赏
  • 举报
回复
谢谢。最后一行的 return -1; 应该是 return false; 吧?
llf_hust 2005-04-09
  • 打赏
  • 举报
回复
上面的算法有问题
int Find(int *pData,int low,int high,int iData)
{
int mid;
if(low >high) return -1;
mid = (low + high)/2;
if( iData == pData[mid]) return true;
if (iData < pData[mid]) return Find(pData,low,mid-1,iData);
else return Find(pData,mid+1,high,iData);
}
llf_hust 2005-04-09
  • 打赏
  • 举报
回复
bool Find(int *pData,int start,int iCount,int iData)
{
int i=0 , j;
while (i < iCount)
{
j = (i+iCount)/2;
if ( pData[j] == iData)
return true;
else if ( pData[j] < iData)
return Find(pData,0,j-1,iData);
else
return Find(pData,j+1,iCount,iData);
}
return -1;
}
  • 打赏
  • 举报
回复
请各位帮忙
  • 打赏
  • 举报
回复
是的。当时就没写好。结果被刷了。我是小菜鸟呵。
MagicCarmack 2005-04-09
  • 打赏
  • 举报
回复
面试题?
  • 打赏
  • 举报
回复
呵呵,这是我去面试的一道题目,要求就是用递归实现的。再次谢谢各位啦

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧