请务必把回复页面左侧的
Wind Code自动转换
关掉,不然会被自动转换掉,成了斜体标志
我把折半查找法的算法发上来
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
查找
看例子比较容易懂
例如:已知11个数据元素的有序表(05,13,19,21,37,56,64,75,80,88,92),现要查找数据元素21和85。
#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();
}
当然这个程序很粗糙了
改进了些,但是还是不好。
#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;
}
欢迎光临 碧海潮声大学生网 (http://www.zjoubbs.com/) | Powered by Discuz! X3.2 |