[数据结构]二分法查找数组元素

文章介绍了如何使用二分法查找算法在已排序的整数和浮点数数组中寻找特定元素,包括示例代码实现和局限性讨论。
摘要由CSDN通过智能技术生成

二分法实现查找有前提条件:待查找数组元素必须为有序排列的;

二分法查找具有局限性:一次只能找一个数;

1.在整数数组查找

#include <stdio.h>






/*实现二分法查找一个整数元素*/
int divide_search(int* arr, int length, int value);
int main() {
    int arr[] = { 10,11,12,21,23,31,33,37,55,60,61,70 };
    int length = sizeof(arr) / sizeof(int);
    int rank = 0, value = 0;

    printf("请输入需要查找的数据\n");
    scanf_s("%d", &value);
    rank = divide_search(arr, length, value);
    printf("rank=%d", rank);

    return 0;
}

int divide_search(int* arr, int length, int value) {
    int left = 0, right = length - 1,mid=0;
    while (left <= right) {
        int mid=(left+right)>>1;//用于取平均值,运算速度更快
        if (value < arr[mid]) {
            right = mid - 1;
        }
        else if (value > arr[mid]) {
            left = mid + 1;
        } 
        else {
            printf("value=%d\n", arr[mid]); 
            return mid;                
        }
    }
    if(left>right){
        printf("未找到"); return -1;
    }
}

2.在浮点数数组查找

#include <stdio.h>






/*实现二分法查找一个小数*/
int divide_search(float* arr, int length, float value);
int main() 
{
    float arr[] = { 10.0,11.1,12.3,21.5,23.1,31.2,33.3,37.5,55.5,60.1,61.0,70.1 };
    int length = sizeof(arr) / sizeof(int);
    int rank = 0; 
    float value = 0;
    printf("请输入需要查找的数据\n"); scanf_s("%f", &value);
    rank = divide_search(arr, length, value);
    printf("rank=%d", rank);

    return 0;
}
int divide_search(float* arr, int length, float value) 
{
    int left = 0, right = length - 1;int mid = 0;           
    while (left <= right) {
        int mid=(left+right)>>1; 
        if (value < arr[mid]) {
            right = mid - 1;
        }
        else if (value > arr[mid]) {
            left = mid + 1;
        } 
        else {
            printf("value=%f\n", arr[mid]); return mid;                
        }
    }
    if(left>right){
        printf("未找到"); 
        return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值