C语言算法——实现二分查找

#include <stdio.h>
int main()
{
    
    
    int search(int *p,int len,int x);  //函数的声明
    int a[] = {
    
    1,2,3,5,7,8,9};  //二分查找是针对排好序的数组而言的。
    int *p = a;         //指针指向数组a的首地址
    int len = sizeof(a)/sizeof(int);//求出数组的长度
    int x ;
    printf("请输入你要查找的数:");
    scanf("%d",&x);
    int t = search(p, len, x);
    if(t==-1)
        printf("你要查找的数%d不在数组中!!!",x);
    else
        printf("你查找的数%d在数组中的下标为:%d",x,t);
    printf("\n");
}

int search(int *p,int len,int x){
    
      //该函数用于二分查找算法
    int temp,low=0,high=len-1;      //low和high表示在这两个变量的范围内进行查找我们我要查找的数,也是在这两个数之间进行二分法
    while(low<=high){
    
    
        temp = (low+high)/2;   //查找low和high之间中间的下标。这也是二分查找的精髓
        if(p[temp]==x)
            return temp;  //如果查找到了,就返回这个数在数组中的下标。
        else if(x<p[temp])
            high = temp-1; //如果查找的数比二分查找得到中间的数还要小,那么就将high的指向指向一半前面的那一个数,在继续进行二分查找。
        else if(x>p[temp])
            low = temp+1; //如果查找的数比二分查找得到中间的数还要大,那么就将high的指向指向一半后面的那一个数,在继续进行二分查找。
    }
    return -1; //上面循环查找我们要得到的值,如果没有查找到,循环就会跳出,这个时候就返回-1,表示没有查到我们要得到的值。
}

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45696288/article/details/122268969