栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

一文搞懂二分查找C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文搞懂二分查找C语言

int search(int* nums, int numsLen, int target ) {
    // write code here
    if(numsLen==0)
        return -1;
    int left=0;
    int right=numsLen-1;
    int mid;
    while(left<=right)
    {
        mid=(right+left)>>1;//右移一位即/2
        if(nums[mid]==target)
            return mid;
        else if(nums[mid]>target)
        {
            right=mid-1;
        }
        else
        {
            left=mid+1;
        }
    }
    return left;//左值即为要插入该数的位置
}
二分查找可用于任何局部有序的数组

int findPeakElement(int* nums, int numsLen ) {
    // write code here
    int left=0;
    int right=numsLen-1;
    int mid;
    while(left
        mid=(right+left)>>1;
        printf("%d %d %dn",nums[left],nums[mid],nums[right]);
        if(nums[mid] 

int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
    if(rotateArrayLen==1)
        return rotateArray[rotateArrayLen-1];
    int mid=0;
    int left=0;
    int right=rotateArrayLen-1;
    while(left
        mid=(right+left)>>1;
        //printf("%d %d %dn",rotateArray[left],rotateArray[mid],rotateArray[right]);
        if(rotateArray[mid]
            right=mid;//该数可能为最小 则right=mid;
        }
        else if(rotateArray[mid]>rotateArray[right])//表示中点位于第一段单调递增数列
        {
            left=mid+1;//该数不可能为最小,则left=mid+1;
        }
        else
        {
            right=right-1;//有相同元素
        }
    }
    return rotateArray[left];
    // write code here
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/848003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号