二分搜索技术

简介:

分治法的基本思想:将一个规模为n的问题,分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解这些子问题,然后将各个子问题的解合并得到原问题的解。

经典例子:二分搜索

算法基本思想:

1 将n个元素分成个数大致相同的两半,取n/2与x进行比较。

2 如果找到,则终止,返回。

3 如果小于n/2,则在小半部分继续查找。

4 如果大于n/2,则在大半部分继续查找。

算法描述代码:

复制代码
#include <iostream>
using namespace std;

template <class Type>
int BinarySearch(Type a[],const Type &x,int n){
    int left=0;
    int right = n-1;
    while(left<=right){
        int middle = (left+right)/2;
        if(x == middle)
            return middle;
        if(x > a[middle])
            left = middle+1;
        else
            right = middle-1;
    }
    return -1;
}
int main()
{
    int num[10] = {0,9,8,7,6,5,4,3};
    int a;
    cout<<"输入想要查找的数字:"<<endl;
    cin>>a;
    int find = BinarySearch(num,a,9);
    if(find!=-1)
        cout<<find<<endl;
    else
        cout<<"找不到想要的结果"<<endl;
    return 0;
}
复制代码

运行结果如下:

本文转自博客园xingoo的博客,原文链接:二分搜索技术,如需转载请自行联系原博主。
相关文章
|
4月前
|
算法 搜索推荐 Java
二分查找算法详解及实现
二分查找算法详解及实现
57 2
|
5月前
|
移动开发 算法
二分查找之红蓝二分查找
二分查找之红蓝二分查找
|
5月前
|
算法 索引
算法思想总结:二分查找算法
算法思想总结:二分查找算法
|
5月前
|
算法 测试技术 API
深入理解二分查找算法(一)
深入理解二分查找算法(一)
|
5月前
|
存储 算法 C#
C# | 二分查找算法的实现
二分查找法一种在**有序数组**中查找目标值的算法。划重点——“**有序**”,与需要遍历整个数组的查询算法不同,二分查找法通过将数组分成两部分来快速定位目标值所在的位置。 它的主要好处在于它的效率很高。因为它能够通过每次排除一半的元素来快速缩小搜索范围,因此在大型数据集上使用二分查找法可以显著提高查找速度。
46 0
|
算法
二分查找算法
以整型升序数组arr为例,将数组分为两部分:数组大小为size,设置数组下标left、mid、right,初始时分别为首元素下标0、中间元素下表(right-left)/2和最后元素下标 size-1,左部分为left-mid,右部分为 mid-right 设查找值为x,比较x与mid的大小。
50 0
|
算法 Go 索引
870. 优势洗牌:田忌赛马:贪心算法+双指针
这是 力扣上的 870. 优势洗牌,难度为 中等。
109 0
|
存储 算法 Windows
【趣学算法】Day4 分治算法——二分搜索
【趣学算法】Day4 分治算法——二分搜索
92 0
|
存储 算法
秒懂算法 | 选第二大元素的分治算法
运用“分而治之”的思想,解决选第二大元素问题。
619 0
秒懂算法 | 选第二大元素的分治算法