c语言二分查找

本文介绍了二分查找(折半查找)在C语言中的实现方式,包括通过函数和直接在主函数中实现。文章提供了示例代码,展示了如何在有序数组中查找特定数值,并处理找不到目标值的情况。关键点在于计算中间元素下标的表达式,确保不会出现整型溢出问题。
摘要由CSDN通过智能技术生成

c语言二分查找(折半查找)

使用二分查找的前提条件

二分查找的基本原理

 

1.通过函数实现

 #include<stdio.h>
int bin_search(int arr[], int left, int right, int key)//定义一个函数
{
    int mid = 0;
    int find = 0;
    while (left <= right) {//实现折半查找
        mid = left + (right - left) / 2;
        if (arr[mid] > key) {
            right = mid - 1;
        }
        else if (arr[mid] < key) {
            left = mid + 1;
        }
        else {
            find = 1;
            break;
        }
    }

    if (1 == find) {
        return mid;
    }
    else {
        return -1;
    }
}
int main() {
    int arr[] = { 0,1,2,3,4,5,6,7,8,9,10 };//定义一个有序数组
    int key=4;
    int left = 0;//左下标从0开始
    int sz = sizeof(arr) / sizeof(arr[0]);//数组的大小
    int right = sz - 1;//右下标数组的大小-1
    scanf("%d", &key);//输入要查找的数
    int result=bin_search(arr, left, right, key);//对函数进行调用
    if (result!=-1) {
        printf("找到了,下标为%d\n", result);
    }
    else {
        printf("找不到\n");
    }
    return 0;
}

2.直接实现

#include int main() {

int arr[] = {1,2,3,4,5,6,7,8,9,10};

int left = 0;

int right = sizeof(arr)/sizeof(arr[0])-1;

int key = 7;//要找的数字

int mid = 0;//记录中间元素的下标

int find = 0;

 while (left <= right) {//实现折半查找
        mid = left + (right - left) / 2;
        if (arr[mid] > key) {
            right = mid - 1;
        }
        else if (arr[mid] < key) {
            left = mid + 1;
        }
        else {
            find = 1;
            break;
        }
    }

if(1 == find )

printf("找到了,下标是%d\n", mid);

else

printf("找不到\n");

}

求中间元素的下标,使⽤ mid = (left+right)/2 ,如果left和right⽐较⼤的时候可能存在问 题,可以使⽤下⾯的⽅式:

mid = left+(right-left)/2;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值