折半查找(二分查找)

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

简单的理解就是整形有序的数组中,在查找过程中把要查找的与数组最中间的数进行比较以次循环进行查找,找到了返回下标,找不到返回 - 1。

#include < stdio.h >
#include < stdlib.h>

//折半查找函数
int binary_search(int arr[], int key, int line)
//确定的数组长度需要以传参的形式传给函数,数组的长度不能在函数内部进行计算,
//数组传参过程是以指针形式进行传址的

{                                           
    int left = 0;                            
    int right = line - 1;
    while (left <= right)
    {
        int mid = left + (right - left) / 2;//数组的中间值
        if (arr[mid] == key)
        {
            return mid;//找到了,返回下标
        }
        else if (arr[mid] > key)
        {
            right = mid - 1;
        }
        else
        {
            left = mid + 1;
        }
    }
    if (left > right)
        return -1;//找不到返回-1
}

int main()
{
    int arr[10] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
    int key = 100;//要查找的数
    int line = sizeof (arr) / sizeof(arr[0]);//确定数组长度
    int ret = binary_search(arr, key, line); //折半查找函数
    if (ret == -1)
    {
        printf("找不到\n");
    }
    else
    {
        printf("找到了:%d\n", ret);
    }
    system("pause");
    return 0;
}

程序输出结果:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值