恐怖黎明 亲儿子:数据结构的一个难题!

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 11:49:37
这个题目不会做
高手帮忙做一下
谢谢

1. 实现二分查找,函数原型为:int Binsch(int a[], int n, int k)。
其中a[]是数据数组,n是数组长度,k是被查找的数据,如果k再a[]中返回k的位置,否则返回-1。

要求:
1. 分析功能要求;
2. 分析算法复杂度。

#include "stdio.h"
#include "math.h"
int Find(int k,int a[],int n);

void main()
{
int n = 100;
int a[100];
for(int loop=0;loop<n;loop++)
{
a[loop] = loop; //只有偶数
printf("%d\n",a[loop]);
}
int k,r;
scanf("%d",&k);
r = Find(k,a,n);
printf("Result is 第%d个\n",r);
}
int Find(int k,int a[],int n)
{
int M,m1,m2;
m1 = 0;
m2 = n-1;

do
{
M = (m1+m2+1)/2;
if(a[M]==k)
return M;
else if(a[M]>k)
{
m2 = M-1;
if(m2<m1)
return -1;
}
else if(a[M]<k)
{
m1 = M + 1;
if(m1>m2)
return -1;
}
}
while(1);
return 0;
}