关闭

二分查找

标签: 二分查找binary
48人阅读 评论(0) 收藏 举报
分类:

Description
实现二分查找函数,函数接口如下。
/* size为数组s的实际大小。
假定s非递减有序,如果s中存在值为target的元素,
则返回最后一次出现的位序号,否则返回-1表示不存在。
位序号从0开始计。*/
int binSearch(const int s[], const int size, const int target)
{
// 请将实现代码添加在这里
}
提交时只需提交上述函数,不要提交main()函数。
调用例子:
int s[8] = {0,1,1,3,3,3,6,6};
cout << binSearch(s,8,3) << endl; //输出5
cout << binSearch(s,8,4) << endl; //输出-1
Hint
不允许使用STL库里面的相关函数和库(否则可能会出现编译错误)
包括iostream, map, vector, set, algorithm, queue等

思路

先找到我们需要查找的值,然后往后找到第一个不等于这个值的下标

#include <iostream>
using namespace std;

int binSearch(const int s[], const int size, const int target)
{
    int start = 0;
    int end = size - 1;
    int mid = (start+end)/2;
    while(s[mid] != target&&start <= end) {
        if(s[mid] < target) {
            start = mid + 1;
            mid = (start+end)/2;
        }
        if(s[mid] > target) {
            end = mid -1;
            mid = (start+end)/2;
        }
    }

    if(s[mid] != target) {
        return -1;
    }
    int tag = mid;
    for(int i = mid; i < size; i++) {
        tag = i;
        if(s[i] != target) {
            break;
        }
    }

    return tag-1;
}

int main() {
    int s[8] = {0,1,1,3,3,3,6,6};

cout << binSearch(s,8,3) << endl;  //输出5

cout << binSearch(s,8,4) << endl;  //输出-1
    return 0;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

java二分法实现在有序的数组中定位某数在数组中的位置

在一个有序的数组中,快速查找某值在有序数组中的位置,有人说这很容易啊,直接一个for循环遍历看看数组中哪个值与它相等,输出索引就ok了。这是个很直接的方法,但又没有想过但数组的长度很长时,你遍历一遍是...
  • sunrise_zhu
  • sunrise_zhu
  • 2016-08-04 00:38
  • 2872

(第20讲)关于排序的各种算法的汇总的题目

1、排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前...
  • weiyastory
  • weiyastory
  • 2016-08-18 18:57
  • 7411

字符串逆序/递归逆序/比较排序法+逆序

用字符数组作函数参数编程,利用一个数组实现字符串(允许输入带空格的字符串)的逆序存放。要求如下: (1)在主函数中从键盘输入字符串,字符串的最大长度为80个字符。       调用Inverse(...
  • u013232740
  • u013232740
  • 2015-01-31 20:02
  • 1526

快速排序和二分查找

  • 2015-06-10 17:16
  • 48KB
  • 下载

二分查找算法

  • 2015-02-02 11:51
  • 334B
  • 下载

二分查找札记

  • 2015-03-19 13:38
  • 111KB
  • 下载

二分查找算法和冒泡排序算法

  • 2015-04-22 11:27
  • 942KB
  • 下载

java数组二分查找

  • 2015-11-02 16:56
  • 2KB
  • 下载

二分查找_测试

  • 2016-12-12 15:55
  • 149KB
  • 下载

二分查找算法

  • 2014-04-15 05:21
  • 1KB
  • 下载
    个人资料
    • 访问:2700次
    • 积分:156
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:3篇
    • 译文:0篇
    • 评论:31条
    文章分类