C++二分查找总结

15 篇文章 0 订阅
13 篇文章 1 订阅

二分查找是一种非常快速的查找方法,又称折半查找。

二分查找定义

二分查找(Binary Search)技术。它的前提是线性表中的记录必须是关键码有序(通常为升序),线性表必须采用顺序存储。

二分查找的基本思想:

在有序表中,取中间记录作为比较对象,若给定值与中间记录相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。

不断重复,直至查找成功,或所有查找区域无记录查找失败为止。

代码示例

//by lmy
#include <iostream>
using namespace std;
/*a是数组名,n为数组长度,key为要查找的数值*/
int Binary_Search(int *a, int n, int key)
{
    /*low为数组下限,high为数组上限,mid为中值*/
    int low, high, mid;
    low = 1;  /*定义最低下标为记录首位*/
    high = n; /*定义最高下标为记录末位*/
    while (high >= low)
    {
        mid = (low + high) / 2; /*折半*/
        if (key < a[mid])       /*若查找值比中值小*/
            high = mid - 1;
        else if (key > a[mid]) /*若查找值比中值大*/
            low = mid + 1;
        else
            return mid; /*若相等则说明mid即为查找到的位置*/
    }
    return 0;
}
int main()
{
    int a[50], i;
    for (i = 1; i <= 50; i++)
        a[i] = i + 50;
    cout << Binary_Search(a, 50, 52) << "\n";
}

运行结果:2

使用二分的注意点

二分查找是一种算法,其输入是一个有序的元素列表(必须有序),二分查找的是要查元素在数组中的位置

二分查找的时间复杂度:
O(logn)

学习二分的收获

1.算法的速度并非指运行时间,而是操作数的增速
2.谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加
3.一些常见的大O运行时间
O(logn),也叫对数时间,这样的算法包括二分查找
O(n),也叫线性时间,这样的算法包括简单查找哦
O(n*logn),例:快速排序
O(n^2),例:选择排序(一种效率较低的排序方法)
O(n!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值