BinarySearch-----二分查找法

二分查找法

  1. 原理:
    假设现在有一个数组: 1 2 3 4 5 6 7 8 9
    二分法的关键就是数据是排好序的,然后找到中间值,key(目标)与中间值进行比较,比中间值小则从首元素到中间值得前一个元素之间查找,如过key比中间值大,则在中间值得后一个元素直到数据最后一个元素之间查找。
    举个例子:
    假设要找的key = 4;
    low = 1;
    high = 9;
    mid = (low + high) / 2;---------------------------------------此除法为(C++)整数除法,即5 / 2 = 2 7 / 2 = 3;
    1--------9的中间元素为5(mid),显然key < 5(mid),那就在1-----4之间找,进而得到mid = (1+4) / 2 = 2;key(4) > mid(2),然后在3-----4之间找mid = (3 + 4) / 2 = 3,key(4) > mid (3),然后low和high = 4,mid=(low + high) = (4+4) / 2 = 4,恰好key = mid.找到程序返回(returen mid;)就好了。
  2. 代码
#include 
using namespace std;

int BinSearch(int arr[],int size,int key)   //查找目标为整形数组;数组长度为size;查找关键字为key
{
     
    int low = 0;   //数组第一个元素的下标
    int high = size - 1; //数组最后一个元素的下标
    while(low <= high)
    {
     
        int mid = (high + low ) / 2;
        if(key == arr[mid])
        {
     
            return (mid);
        }
        else if(key < arr[mid])
        {
     
            high = mid - 1;
        }
        else
        {
     
            low = mid + 1;
        }
    }
    return (-1);   //找不到返回-1
}
int main()
{
     
    int arr[100];  //定义一个数组
    for(int i = 0;i < 100;i++) //为数组赋值
    {
     
        arr[i] = i;
    }
    int result = BinSearch(arr,100,56);  //如果能找到下标按理来说是56
    cout  << "search result : " << result <<endl;
    return 0;
}

  1. 广告:欢迎访问我的个人博客:https://www.duanqyt.xyz
  2. 如有问题,请回复我,立马修改。

你可能感兴趣的:(c++,算法)