对数组进行排序并且查找

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小yuan在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值