zoukankan      html  css  js  c++  java
  • 二分查找

    二分查找的概念
    二分查找又称为折半查找,主要用于查找一个有序数组中某一个数的位置。
    主要思想如下:
    在一个有序数组中,取数组的中间值与要查找的数进行比较;
    若要查找的数等于中间值,查找成功。

    二分查找的步骤
    若要查找的数大于中间值,则在右半区间继续取中间值与要查找的数进行比较;
    若要查找的数小于中间值,则在左半区间继续取中间值与要查找的数进行比较;
    直至最后要查找的数未出现过与中间值相等的情况,查找失败

    二分查找的优势
    二分查找因为每次查找都会把这个数据折半,所以效率相对较高。如果使用普通的查找可能会消耗太多的时间。
    大家可以试试看,在1-100之间随便设定一个数字,只需要最多最多7次肯定能猜对,每次问的都是这个数字和范围中间的数字比大小,每次比完都能去掉一半的数字。

    找某个数的位置
    在有序数组中查找某个数,找到返回数的下标,不存在重复的值,没有返回-1。

    【输入描述】第一行两个整数空格分开,分别表示序列长度n以及查询次数m。
    第二行输出n个整数
    接下来m行,每行一个整数,表示查询的数字。
    【输出描述】输出m行,每行为查询数字的位置(位置从1开始算)。
    【样例输入】3 3
    4 6 9
    9
    4
    7
    【样例输出】3
    1
    -1

    找某个数的位置参考代码

    #include<iostream>
    using namespace std;
    int Search(int a[] , int n, int key){
        int low = 1;
        int high = n;
        while(low <= high) {
    	int mid = low + ((high-low)/2);
    	if(key == a[mid])   return mid;
        	else if(key < a[mid])high = mid - 1;
        	else low = mid + 1;
        }
        return -1;
    } 
    int main()
    {
        int s[100000],n,m,b;
        cin>>n>>m;
        for(int i=1;i<=n;i++)cin>>s[i];
        for(int i=1;i<=m;i++)
        {
    	cin>>b;
    	cout<<Search(s,n,b)<<endl;
        }
        return 0;
    } 
    
    我是bigbigli!!! 更多内容请关注微信公众号:“大李日志”
  • 相关阅读:
    Oracle 学习笔记 12 -- 序列、索引、同义词
    解决:设置中打开蓝牙,測试机不会自己主动搜索设备
    mysql 数据库查询最后两条数据
    jQuery中this与$(this)的差别
    Apache http server linux 安装过程说明
    Swift学习——Swift基础具体解释(一)
    CloudFoundry V2 单机版离线安装(伪离线安装)
    CF1119F Niyaz and Small Degrees
    2019-8-31-C#-如何引用-WshShell-类
    2019-8-31-C#-如何引用-WshShell-类
  • 原文地址:https://www.cnblogs.com/bigbigli/p/13282753.html
Copyright © 2011-2022 走看看