| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2832 人关注过本帖
标题:关于二分法查找数值的程序
只看楼主 加入收藏
fireleaf
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-9
收藏
 问题点数:0 回复次数:4 
关于二分法查找数值的程序

先有格式如下的数据: 第一列为序号,第二列为X坐标,第三列为Y坐标,第四列为Z坐标
1.000000 0.000000 0.000000 0.000000
2.000000 0.000000 0.000000 0.000000
3.000000 0.000000 0.000000 0.000000
4.000000 0.000000 0.000000 0.000000
5.000000 0.000879 -0.004932 0.000000
6.000000 0.000879 0.004931 0.000000
7.000000 0.000879 -0.004931 0.000000
8.000000 0.000879 0.0049312 0.000000
9.000000 0.001877 -0.009841 0.000000
10.000000 0.001877 -0.009840 0.000000

已经QuickSort排好顺序,现在需要用Binary Search(二分法)找到其中某一组坐标,
如何实现呢? 多谢~

搜索更多相关主题的帖子: 二分法 数值 
2007-08-09 07:03
寂寞的柳丁
Rank: 2
等 级:论坛游民
威 望:2
帖 子:93
专家分:10
注 册:2007-8-6
收藏
得分:0 
回复:(fireleaf)关于二分法查找数值的程序

這段程序是以前得作業,意思是 先讀取test3.dat內得數據排序之后保存在sort.csv文件內 然后利用二分法查找出電話號碼.輸入得是數據文件內得序列號.數據文件test3.dat如附件.
#include <stdio.h>
#include <conio.h>
#include <string.h>
//#include <mem.h>
#include<stdlib.h>
//#define max 300
struct Info
{
int id;
char str[200];
} data[300];

//int search(int q,int start,int end);
int search(int array[],int key,int max);
int main()
{
struct Info tmp;
int i,j,num,query;

int array[300];
char ch;
char *p;
char tel[12];
FILE *fp;
FILE *fo;
fp = fopen("test3.dat","r");
fo = fopen("sort.csv","w");
num = 300;
memset(data, 0, 300*sizeof(struct Info));
for (i = 0; i<300; i++)
{
fscanf(fp, "%d", &data[i].id);
p = data[i].str;
fscanf(fp, "%c",&ch);
while(ch != '\n')
{
*p = ch;
p++;
fscanf(fp, "%c",&ch);
}
*p = '\n';
}
for (i = 0; i < num; i++)
{
for (j = 0; j < num; j++)
{
if (data[i].id > data[j].id)
{
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}
for (i = 0; i < num; i++)
{
array[i]=data[i].id;
fprintf(fo,"%d%s",data[i].id,data[i].str);
}
fclose(fp);
fclose(fo);
printf("Please Input Query Number:\n");
printf("Input -1 to End Query\n");
scanf("%d",&query);
while(query != -1)
{
int k = search(array,query,300);
if (k == -1)
{
printf("This Id is not exist!\n");
//scanf("%d",&query);
break;
}
p = data[k].str+strlen(data[k].str);
while (*p != ',') p--;
p++;
strcpy(tel,p);
printf("%s",tel);
scanf("%d",&query);
}
return 0;

}

/*int search(int q,int start,int end)
{
int mid = (end + start)/2;
int i;
if ((end - start) < 3)
{
for (i = start; i < end; i++)
if (q == data[i].id) return i;
return -1;
}
else
{
if (q < data[mid].id)
return search(q,mid,end);
else if (q > data[mid].id)
return search(q,start,mid);
else if (q == data[mid].id)
return mid;
}
return 0;
}*/
int search(int array[],int key,int max)
{
int low=0;
int hig=max-1;
int mid=(low+hig)/2;
while(low<=hig)
{
if(array[mid]==key)return mid;
else if(array[mid]<key)
{
hig=mid-1;


}
else
{
low=mid+1;
}
mid=(low+hig)/2;
}
return -1;
}

2007-08-09 09:12
寂寞的柳丁
Rank: 2
等 级:论坛游民
威 望:2
帖 子:93
专家分:10
注 册:2007-8-6
收藏
得分:0 

我這傳不了附件

test.dat里面得數據是這樣得
id(序列號,也就是后來查詢得時候輸入得),公司名稱,公司所在城市,公司地址(具體得地址例如某某寫字樓XX號),公司電話號碼

不好意思阿

2007-08-09 09:25
fireleaf
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-9
收藏
得分:0 
回复:(寂寞的柳丁)我這傳不了附件 test.dat里面得數...

谢谢大侠的源程序!跟我TEST用的程序差不多。
现在的问题在于我们采用的数列都是整数,但是目前数据里面的数值都是浮点数。
这样怎么用二分法比较呢?书上也都是整数的例子。。。。。。
问题比较弱智,SORRY。。。。。。

2007-08-09 11:28
寂寞的柳丁
Rank: 2
等 级:论坛游民
威 望:2
帖 子:93
专家分:10
注 册:2007-8-6
收藏
得分:0 
呵呵...我是新手..還真不知道
2007-08-09 11:57
快速回复:关于二分法查找数值的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018923 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved