- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#includestdio.h
#includestdlib.h
#include fstream.h
#include iostream.h
FILE *fp;
//---------折半查找------------------------
#define MAX 20
int data[MAX];
int binary_find(int key, int low, int high)
{
int mid;
if(low == high)
{
if(data[low] == key)
return low;
else
return -1;
}
else
{
mid = (low + high) / 2;
if(mid == low)
mid++;
if(key data[mid])
return binary_find(key, low, mid - 1);
else
return binary_find(key, mid, high);
}
}
//Binary Search
int binary_search(int key)
{
return binary_find(key, 0, MAX - 1);
}
void zheban()
{
int found;
int value;
if((fp=fopen(A.txt,r))==NULL)
{printf(cannot open file\n);
}
for(int i=0;iMAX;i++)
fscanf(fp,%d,data[i]);
fclose(fp);
printf(有序序列为:);
for(i=0;iMAX;i++)
printf(%d ,data[i]);
char y=y;
while(y==y)
{printf(\n请输入查找值: );
scanf(%d, value);
if(value != -1)
{
found = binary_search(value);
if(found != -1)
{
printf(找到查找值: %d位置为[%d]\n, value, found+1);
}
else
{
printf(没有找到查找值: %d\n, value);
}
}
else
exit(1);
cout是否继续:y/n:;
ciny;
}
coutendl;
}
//--------------斐波拉契查找------------------------------
#include stdio.h
void fibonacci(int *f)
{
f[0] = 1;
f[1] = 1;
for(int i = 2;i MAX;++i)
f[i] = f[i - 2] + f[i - 1];
}
int fibonacci_search(int *a,int key,int n)
{
int low = 0,high = n - 1;
int mid = 0;
int k = 0;
int F[MAX];
fibonacci(F);
while(n F[k] - 1) //计算出n在斐波那契中的数列
++k;
for(int i = n;i F[k] - 1;++i) //把数组补全
a[i] = a[high];
while(low = high)
{
mid = low + F[k-1] - 1; //根据斐波那契数列进行黄金分割
if(a[mid] key)
{
high = mid - 1;
k = k - 1;
}
else if(a[mid] key)
{
low = mid + 1;
k = k - 2;
}
else{
if(mid = high) //如果为真则找到相应的位置
return mid;
else
return -1;
}
}
return -1;
}
int Fibonacci()
{
if((fp=fopen(A.txt,r))==NULL)
{printf(cannot open file\n);
}
for(int i=0;iMAX;i++)
fscanf(fp,%d,data[i]);
fclose(fp);
printf(有序序列为:\n);
for(i=0;iMAX;i++)
printf(%d
文档评论(0)