cf挑战模式有什么永久:关与二分法的问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 03:28:46
#include "stdio.h"
#define maxsize 55
struct student{
int num;
char name[20];
char sex;
int age;
};
struct student stu[maxsize]={{01,"li",'m',18},{02,"zhang",'m',19},{03,"ma",'f',19}};
int BinarySearch(struct student A[], int key)
{
int Low, Mid, High;
Low = 0;
High = maxsize - 1;
while(Low <= High)
{
Mid = (Low + High) / 2;
if(A[Mid].num < key)
Low = Mid + 1;
else if(A[Mid].num > key)
High = Mid - 1;
else
return Mid;
}
return -1;
}
main()
{
printf("BinarySearch: %d\n", BinarySearch(stu, 02));
}
我这个程序什么地方错了吗?
怎么查不到啊?

我晕了。。
你能查到才怪了
你看你的定义
struct student stu[maxsize]={{01,"li",'m',18},{02,"zhang",'m',19},{03,"ma",'f',19}};
只给数组前三个数赋了值
后面52个的num全是0
你二分一下就去27以后找去了
27以后的num全是0你怎么能找得到呢

是啊,二分查找必须是有序的表才可以进行,你对前三项赋值,对于关键字来说是,1,2,3,0....这个序列是无序的。你可以只对前三个进行,#define maxsize 3

汗........