您当前的位置: 首页 >  算法

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

2021年SWPUACM暑假集训day1二分算法

MangataTS 发布时间:2021-07-07 23:24:52 ,浏览量:0

二分算法是什么

二分搜索是一种时间复杂为 l o g 2 n log_2n log2​n的算法,可以用于单调函数求根和单调序列查询的有效算法,即使在数列长度在很大的情况下也能很快对其查询,在此同时二分算法也是一种思维方式,在很多解题过程中可以更好的优化代码等等

二分算法的原理

每次拿目标数值(以下用key表示)与数组中间位置的数据(以下用a[mid]表示,mid表示数组中间位置索引值)进行比较,如果key大于a[mid],继续将key与大于a[mid]部分的中间位置的值进行比较;如果key小于a[mid],继续将key与小于a[mid]部分的中间位置值进行比较。

注:对于无序数组,若先进行排序,再使用二分查找,这种方法虽然可以实现查找,但是会改变最原始数组的元素位置,所以针对无序数组,最好用基本的查找算法实现

二分代码实现 一、朴素实现
int search(int l,int r,int key) {
    int mid = l + r >> 1;
    while(a[mid] != key) {
        if(a[mid] > key) {
            r = mid - 1;
        }
        else {
            l = mid + 1;
        }
        if(l > r) return -1; //没找到
        mid = l + r >> 1;
    }
    return mid;
}
二、通用实现
int search(int k) {
    int l = -1,r = n;//注意的是数组是从0开始的
    while(l + 1 > 1;
        if(a[mid]             
关注
打赏
1665836431
查看更多评论
0.0366s