二分法查找

#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#define max 20

typedef struct {
    int  data[max];
    int last;
}SequenList;


SequenList * init();                        //  新建顺序表并初始化
int search(SequenList * ,int  );            //  二分法查找
void show(SequenList *);                    //展示元素

int main (){
    SequenList * head = init();
    show(head);
    int key ;
    int s ;
    while(1){
    fflush(stdin);
    scanf("%d",&s);
    key = search(head,s);
    if (key >= 0 ){
        printf("该元素的位置是: %d \n",key+1);
    }else{
        printf("\n找不到该元素\n");
    }
    }
    system("pause");
    return 0;
}

SequenList * init(){
    SequenList * p = (SequenList*)malloc(sizeof(SequenList));
    p ->last = 0;
    int i = 0;
    p->data[0] = rand()%10;
    for (i = 1 ; i < 10 ; i ++ ){
        p->data[i] = p->data[i-1]+ rand()%10;
        p->last++;
    }
    return p;
}

int search(SequenList *  p , int key ){
    int low ,middle,high ;
    low = 0;
    high = p->last;
    middle = (low+high)/2;
    while (low <= high){
        if (key > p->data[middle]){
            low = middle+1;
        }
        else if (key < p->data[middle]){
            high = middle-1;
        }else{
            return middle;
        }
        middle = (low+high)/2;
    }
    return -1;
}
void show(SequenList * p ){
    int i = 0 ;
    for (i = 0 ; i < p->last ; i ++){
        printf("%d ",p->data[i]);
    }
    printf("\n");
}

运行结果如下

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值