找回密码

碧海潮声大学生网

查看: 1394|回复: 10
打印 上一主题 下一主题

〖求助〗折半查找法求助

[复制链接]
跳转到指定楼层
1#
发表于 2006-3-1 19:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<stdio.h>
main()
{
int i,a[1000],x,a;
for(i=0;i<10000;i++)
a=i;
printf("put what you want");
scanf("%d",&x);
if(i>=0&&i<100)k=3;
if(i>=100&&i<1000)k=8;
if(i>=1000&&i<10000)k=14;
for(a=1;a<=k;)
  {
   if(x==a/k){printf("you want is here a[%d]",i); break;}
   if(x<a/k)
   if(x>a/k)
   }
  for(;;)
  if(x==)printf("you want is here a[%d]",i);
    getch();
}

这是个模型,还没写完,我的基本思路是先判断总的有多少数,决定折半的最高次数,然后用折半查找查找要的数,我一时还写不出来,能有高手帮我吗???
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
2#
发表于 2006-3-1 22:53 | 只看该作者

请务必把回复页面左侧的


Wind Code自动转换


关掉,不然会被自动转换掉,成了斜体标志

3#
发表于 2006-3-2 18:15 | 只看该作者
折半查找有算法的,要按算法来编程。
4#
发表于 2006-3-2 18:19 | 只看该作者
折半查找法要用到3个指针,low mid high,low high分别指向查找区间的头和尾,mid=1/2(low+high),
5#
发表于 2006-3-2 18:52 | 只看该作者
楼主大几的?《数据结构》上过吗?
6#
发表于 2006-3-2 22:29 | 只看该作者

我把折半查找法的算法发上来

int Search_Bin(SSTable ST,KeyType key){

//在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0。

low=1; high=ST.length; //置区间初始

while(low<=high){

mid=(low+high)/2;

if(EQ(key,ST.elem[mid].key)) return mid; //找到待查元素

else if(LT(key,ST.elem[mid].key)) high=mid-1; //继续在前半区间进行查找

else low=mid+1; //继续在后半区间进行查找

}

return 0; //顺序表中不存在待查元素

}//Search_Bin

7#
 楼主| 发表于 2006-3-3 19:09 | 只看该作者
我是大ONE,什么都看不懂啊
8#
发表于 2006-3-3 20:28 | 只看该作者

查找

看例子比较容易懂


例如:已知11个数据元素的有序表(05,13,19,21,37,56,64,75,80,88,92),现要查找数据元素21和85。

9#
发表于 2006-3-3 20:58 | 只看该作者

#include
main()
{
int key,low,high,mid,a[11]={05,13,19,21,37,56,64,75,80,88,92};
printf("put what you want:");
scanf("%d",&key);
low=0;
high=11;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==key){printf("you want is here a[%d]",mid);break;}
else if(a[mid]>key)high=mid-1;
else low=mid+1;
}
getch();
}

当然这个程序很粗糙了

10#
发表于 2006-3-3 21:23 | 只看该作者

改进了些,但是还是不好。


#define N 11
main()
{
int x,a[]={05,13,19,21,37,56,64,75,80,88,92};
int search(int s[N],int key);
printf("Put what you want:");
scanf("%d",&x);
if(search(a,x)==0)printf("You want is not here!");
else printf("You want is here a[%d]",search(a,x)-1);
getch();
}

int search(int s[N],int key)
{
int low=0,high=N,mid;
while(low<=high)
{
mid=(low+high)/2;
if(s[mid]==key)return mid+1;
else if(s[mid]>key)high=mid-1;
else low=mid+1;
}
return 0;
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋| 碧海潮声大学生网  

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 浙ICP备11026473号 )

快速回复 返回顶部 返回列表