折半查找(又称二分查找)

本文介绍了一种高效的二分查找算法实现方式,该算法适用于已排序的数组,并使用顺序存储结构来查找目标值。通过不断缩小查找范围直至找到目标值或确定目标值不存在于数组中为止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x< a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。

1.必须采用顺序存储结构
2.必须按关键字大小有序排列,即数组有序。

#include <stdio.h>
int main()
{
    int low,height,mid,key,judge=0;//judge用于判断是否找到 
    int array[9]={5,13,19,21,37,56,64,75,80};
    low = 0;height=8;
    int length=sizeof(array)/sizeof(int);
    scanf("%d",&key); 
    while(height>=low)//只需比较下界和上界,如果上界减到小于下界则为退出条件 
    {
        mid = (low+height)/2;
        if(key==array[mid]){
            judge=1;
            break;
        }

        else if(key<array[mid])
            {
                height=mid-1;
            } 
        else
                low = mid+1;
    }
    if(judge) printf("查找成功!index=%d",mid);
    else printf("查找失败!"); 
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值