#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct {
int *elem;//整型指针
int tablelen;//表里元素个数
}SSTable;//定义表结构
void Init(SSTable& ST,int len){
ST.tablelen=len;
ST.elem=(int*) malloc(sizeof(int)*(ST.tablelen));
srand(time(NULL));//
for(int i=0;i<ST.tablelen;i++){
ST.elem[i]=rand()%50;//随机数赋值,模50规定随机数范围在50内
}
}
void print(SSTable ST){
for(int i=0;i<ST.tablelen;i++){
printf("%3d",ST.elem[i]);
}
printf("\n");
}
int BinarySearch(SSTable ST,int key){
int low=0,high=ST.tablelen-1,mid;
while(low<=high){
mid=(low+high)/2;
if(ST.elem[mid]==key){
return mid;
}else if(ST.elem[mid]>key){
high=mid-1;
}else{
low=mid+1;
}
}
return -1;//没找到返回-1,不是0因为数组下标有0个位置
}
int compare(const void* left,const void* right){//left right是任意两个元素地址
return *(int*)left-*(int*)right;//从小到大排序
//return *(int*)right-*(int*)left;//从大到小
}
int main(){
SSTable ST;
int key,pos;
Init(ST,10);
qsort(ST.elem,ST.tablelen,sizeof(int),compare);//快速排序的函数
print(ST);
scanf("%d",&key);
pos= BinarySearch(ST,key);
if(pos!=-1){
printf("successful,position:%d\n",pos+1);
}else{
printf("no\n");
}
return 0;
}
折半查找代码
最新推荐文章于 2024-10-17 11:39:06 发布