#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef int ElemType;
typedef struct {
ElemType* elem;//数组中数组数据的地址
int tab;//存储动态数组里的个数
}SSTable;
void st_init(SSTable &ST,int len){
ST.tab=len;
ST.elem= (ElemType*)malloc(sizeof(ElemType)*ST.tab);//对数组指针进行空间分配
srand(time(NULL));//随机生成数字
int i;
for (i=0;i<ST.tab;i++){
ST.elem[i]=rand()%100;
}
}
void st_print(SSTable ST){//对动态数组进行打印输出
for(int i=0;i<ST.tab;i++){
printf("%d ",ST.elem[i]);
}
printf("\n");
}
int inserach(SSTable ST,ElemType key){
int i;
for ( i = ST.tab-1; ST.elem[i] !=key&&i>0;i--);//倒着查找,直到查找成功
return i;
}
//折半查找
int binary_search(SSTable ST,ElemType key){
int low=0;
int high=ST.tab-1;
while (low<=high){
int mid=(low+high)/2;
if(key>ST.elem[mid]){
low=mid+1;
}else if(key<ST.elem[mid]){
high=mid-1;
}else{
return mid;
}
}
return -1;
}
int compare(const void* left,const void* right){
return *(int*)left-*(int*)right;//将void指针强转为int*类型,然后再加一个*进行解引用
}
int main() {
SSTable ST;//构建一个动态数组
ElemType key;
st_init(ST,10);//初始化是数组
st_print(ST);
qsort(ST.elem,ST.tab,sizeof(ElemType),compare);//c语言
// 中的一个函数,对数据进行从小到大排列,第一个为数组首地址,数组长度,元素类型,copmare比较函数(需要自己写)
st_print(ST);
printf("Pleasr input the key:\n");
scanf("%d",&key);
ElemType pos;
pos=binary_search(ST,key);
if (pos!=-1){
printf("success %d\n",pos);
} else{
printf("failed\n");
}
return 0;
}
对数组进行排序并且查找
最新推荐文章于 2024-06-16 22:41:02 发布