排序算法四:折半查找(二分查找)

本文深入讲解了二分查找(折半查找)算法的实现过程,包括C++代码示例及时间复杂度分析。通过具体实例展示了如何在有序数组中进行高效搜索,并详细解释了其时间复杂度为O(logN)的原因。

折半查找(二分查找)


1.数据必须有序

#include <iostream>

using namespace std;

int BinarySearch(int *,const int,const int);

int main()
{
    int array[]{1,2,3,4,5,6,7,8,9,10};
    int numIndex = 7;
    int result;
    result = BinarySearch(array,10,numIndex);
    if(result == -1){
        cout<<"没找到!"<<endl;
    }else{
        cout<<"在array["<<result<<"]找到"<<numIndex<<endl;
    }
    cout << "Hello world!" << endl;
    return 0;
}
//折半查找
int BinarySearch(int *a,const int n,const int x){
    int low = 0;
    int high = n-1;
    int midIndex;
    //此循环用于从小到大。从大到小要改else if
    while(low<=high){
        midIndex = (low+high)/2;
        if(a[midIndex] == x){
            return midIndex;
        }else if(a[midIndex]<x){
            low = midIndex + 1;
        }else if(a[midIndex]>x){
            high = midIndex-1;
        }

    }
    return -1;
}

此为从小到大排序查找

从大到小代码核心代码为
if(a[midIndex] == x){
            return midIndex;
        }else if(a[midIndex]<x){
            low = midIndex + 1;
        }else if(a[midIndex]>x){
            high = midIndex-1;
        }

时间复杂度

假设总共有N个元素:
1 次折半: 还剩 N/2 个元素,
2 次折半: 还剩 N/4 个元素,
3 次折半: 还剩 N/8 个元素,
……
K 次折半: 还剩 N/2k 个元素,

最坏的情况:第 K 次折半后还剩一个元素,即:
N/2k = 1
2k = N
k = log2N
所以最坏为:O(log2N) 也可以表示为:O(logN)

最好情况:O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值