【二分查找】无重复数组的二分查找(非递归版本)

// 二分查找法
#include <iostream>
#include <vector>
using namespace std;
int BinarySearch(vector<int> vec,int target)
{
    // 特殊输入
    if(vec.size() <= 0)
        return -1;

    // 二分查找(非递归)
    int low = 0;
    int mid = 0;
    int high = vec.size()-1;

    // 注意:取等号
    while(low <= high)
    {
        mid = (low + high)/2;

        if(vec[mid] == target)
            return mid;

        if(vec[mid] > target)
            high = mid-1;
        else
            low = mid+1;

    }
    return -1;
}

int main()
{
    vector<int> vec = {1,2,3,5,7,7,7,7,9,10};
    int target;
    while(cin>>target)
        cout<<BinarySearch(vec,target)<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/wanglei5205/p/9384394.html

时间: 2024-11-09 18:33:18

【二分查找】无重复数组的二分查找(非递归版本)的相关文章

二分查找算法(递归与非递归两种方式)

首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下所示. /* * 非递归二分查找算法 * 参数:整型数组,需要比较的数. */ public static int binarySearch(Integer[]srcArray,int des){ //第一个位置. int low=0; //最高位置.数组长度-1,因为下标是从0开始的. int h

可查找重复元素的二分查找算法

可查找重复元素的二分查找算法 二分查找算法思想:又称为 折半查找,二分查找适合对已经排序好的数据集合进行查找.假设有一升序的数据集合,先找出升序集合中最中间的元素,将数据集合划分为两个子集,将最中间的元素和关键字key进行比较,如果等于key则返回:如果大于关键字key,则在前一个数据集合中查找:否则在后一个子集中查找,直到找到为止:如果没找到则返回-1. 思路: 1.先定义两个下标 , left = 0 , right = arr.length -1; 2.因为我们也不知道要循环多少次,定义一

有序数组的二分查找

二分查找的优点是比较次数少,查找速度快,但是在查找之前必须建立有序表.另外,二分查找只适用于顺序存储的有序表,而不适用于链接存储的有序表. 假设:给定一个按从小到大排序的数组P,对分查找某个元素的位置. 二分查找的过程为首先将x和数组的中间项进行比较,若x小于中间项的值,则在线性表的前半部分进行二分查找:若x大于中间项的值,则在线性表的后半部分进行二分查找:若x等于中间项的值,则查找结束.若待二分的子表长度为0时仍然没有找到这个元素,则说明数组中没有x. java代码 <span style=&qu

二分查找二维数组

转载请注明出处:http://blog.csdn.net/ns_code/article/details/24977113 剑指offer上的第一道题目,在九度OJ上测试通过 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数

【剑指offer】二分查找二维数组

转载请注明出处:http://blog.csdn.net/ns_code/article/details/24977113 剑指offer上的第三道题目.在九度OJ上測试通过 题目描写叙述: 在一个二维数组中,每一行都依照从左到右递增的顺序排序.每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数,推断数组中是否含有该整数. 输入: 输入可能包括多个測试例子,对于每一个測试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和

爪哇国新游记之二十七----数组的二分查找

代码: import java.util.ArrayList; import java.util.List; public class Bit { int max; int min; int[] arr; public Bit(int[] arrInput) { // 找出极值 for (int i = 0; i < arrInput.length; i++) { if (max < arrInput[i]) { max = arrInput[i]; } if (min > arrInp

二分查找 数组的二分查找

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 1083: 数组的二分查找 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1646  Solved: 641[Submit][Status][Web Board] Description 在1500个整数中查整数x的位置,这些数已经从小到大排序了.若存在则输出其位置,若不存在则输出-1. Input 第一行,一个整数x 后面1500行,每行一个整数 Output 一个整数(表示x的位置,若

【算法】先生,您点的查找套餐到了(二分、插入和斐波那契查找)

参考资料 <算法(java)>                           — — Robert Sedgewick, Kevin Wayne <数据结构>                                  — — 严蔚敏 Interpolation Search[插值查找]     — —  维基百科 Fibonacci Search[斐波那契查找]   — —  GeeksforGeeks 根据输入的一个关键字(Key),  在一个有序数组内查找与该关键

看数据结构写代码(53) 静态查找表(线性查找,二分查找,斐波那契查找,插值查找)

查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录). 查找表分类:静态查找表和动态查找表. 静态查找表:只查找,而不进行插入,删除. 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素. 静态表的 查找 大致 四种 算法: 线性查找,二分查找,斐波那契查找和插值查找. 其中 在线性查找之前,对表 无要求.对于 其余三种 需要 在查找之前 排序.插值查找 除了 需要 排序,还需要 均匀分布. 下面 给出代码: 线性查