C++算法五:二分查找(折半)查找

二分查找是对排序的数据进行排序,查找效率非常高。
  • 2的20次方是100万,就是(1M),折半查找100万个数据只需要20次
  • 2的30次方就是10亿,也就是(1G),折半查找只需要30次
#include<iostream>
using namespace std;
int BinarySearch_I(int *a,const int x,const int n);
int BinarySearch_r(int *a,const int x,const int left,const int right);
int main()
{
    int m[] = {0,1,2,3,4,5,6,7,8,9,10};
    int reslut,reslut1,num=28;
    reslut = BinarySearch_r(m,num,0,10);
    if(reslut<0)
    {
        cout<<"没找到";
    }else{
        cout<<"在m["<<reslut<<"]找到"<<endl;
    }
    reslut1 = BinarySearch_I(m,num,10);
    if(reslut<0)
    {
        cout<<"没找到";
    }else{
        cout<<"在m["<<reslut<<"]找到"<<endl;
    }
    return -1;
}
//迭代
int BinarySearch_I(int *a,const int x,const int n)
{
    int left = 0,right = n-1;
    while(left<=right)
    {
        int mid = (left+right)/2;
        if(x<a[mid]) right = mid -1;
        else if(x>a[mid]) left = mid +1;
        else return mid;
    }
    return -1;
}
//递归
int BinarySearch_r(int *a,const int x,const int left,const int right)
{
    if(left<=right)
    {
        int mid = (left+right)/2;  //算法的核心就是折半
        if(x<a[mid]) return BinarySearch_r(a,x,left,mid -1);
        else if(x>a[mid]) return BinarySearch_r(a,x,mid+1,right);
        else return mid;
    }
    return -1;
}

猜你喜欢

转载自blog.csdn.net/ziyouyi111/article/details/80355371