C/C++循序表的二分查找

#include <string>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
//循序表数据结构
typedef int Elemetype;
typedef struct SquanList{
    Elemetype *data;
    int length;
}SquanList;
//建立循序表
void EnElement(SquanList &L){
    printf("Please input the length of List:");
    int Length;  //定义循序表长度
    scanf("%d",&Length);
    L.length=Length;
    L.data=(Elemetype*) malloc(sizeof (Elemetype)*L.length);
    srand(time(NULL));
    for (int i =0;i<L.length; ++i) {
        L.data[i]=rand()%100;
    }
}
/*定义compare函数,由于二分查找只适用于已排序好的循序表,所以查找前必须进行排序。
 * 而这里我们用到qsort函数进行排序,所以需要先定义compare函数规定排序方式。*/
int Compare(void const *Right,void const *Left){
    return *(Elemetype*)Right- *(Elemetype*)Left;  //从小到大排序
}
//排序函数
void Sorting(SquanList L){
    qsort(L.data,L.length,sizeof (Elemetype),Compare);//qsort实现的是快排
}
//二分查找函数
int BenarSearch(SquanList L){
    int Target;
    printf("Please input the target Element:");
    scanf("%d",&Target);
    int Lost=0,High=L.length-1,Middle;  //二分查找用到目标数据的最大值,最小值,中间值的下标
    Middle=(Lost+High)/2;
    while (High>=Lost){
        if (Target>L.data[Middle]){
            Lost=Middle+1;
            Middle=(Lost+High)/2;
        } else if (Target<L.data[Middle]){
            High=Middle-1;
            Middle=(Lost+High)/2;
        } else{
            printf("The post of target Element :%d\n",Middle+1);
            return Middle;
        }
    }
    printf("Target Element dose not exit!\n");
    return -1;
}
//遍历顺序表
void PrintList(SquanList L){
    for (int i = 0; i < L.length; ++i) {
        printf("%3d",L.data[i]);
    }
    printf("\n");
}
int main() {
    SquanList L;
    EnElement(L);
    Sorting(L);
    PrintList(L);
    BenarSearch(L);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值