Binary Search--二分查找

  采用二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。

  二分法查找在针对大量有序排列的情况下发挥出很优越的效率,其时间复杂度O(lgN)。

  

  代码:

 /*
Author:Mengmeng
Time:2016-6-27 23:33:49
Description:
采用二分法查找时,数据需是排好序的。
基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,
如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;
若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
*/
#include <iostream>
using namespace std; int BinarySearch(int data[],int min,int max,int dest,bool UpOrDown)
{
int mid = ;
if (min > max)//递归结束条件
{
cout << "找不到" << dest << "!"<<endl;
return -;
}
mid = (max + min) / ;
if (dest == data[mid])//递归结束条件
return mid;
if (UpOrDown == true)//升序排列
{
if (dest < data[mid])//递归条件
return BinarySearch(data, min, mid - , dest, true);
else
return BinarySearch(data, mid + , max, dest, true);
}
else//降序排列
{
if (dest < data[mid])
return BinarySearch(data, mid + , max, dest, false);
else
return BinarySearch(data, min, mid - , dest, false);
} }
int main(void)
{
int data1[] = { , , ,,,,,,, };
int data2[] = { , , , , , , , , , };
#if 0
cout << "请参照下列数字:" << endl;
cout<< "{";
int len = sizeof(data1) / sizeof(int);
for (int i = ; i < len; i++)
cout << data1[i] << " ";
cout << "}" << endl;
cout << "输入你要查找的目标:" << endl;
int dest;
cin >> dest;
cout <<"----------------------------------------"<< endl;
int index = BinarySearch(data1, , len - , dest,true);
#endif
#if 1
cout << "请参照下列数字:" << endl;
cout << "{";
int len = sizeof(data2) / sizeof(int);
for (int i = ; i < len; i++)
cout << data2[i] << " ";
cout << "}" << endl;
cout << "输入你要查找的目标:" << endl;
int dest;
cin >> dest;
cout << "----------------------------------------" << endl;
int index = BinarySearch(data2, , len - , dest, false);
#endif
if (index!=-)
cout << dest << "在数组中的位置为第" << index << "个" << endl;
return ; }

  运行结果:

  (1)升序的情况:

    

  

  (2)降序的情况:

    

  

Binary Search--二分查找的更多相关文章

  1. [01]Binary Search二分查找

    Binary Search二分查找 作用:二分查找适用于有序的的数组或列表中,如果列表及数组中有n个元素,通过二分查找查询某一元素的位置需要的步骤是log2(n)(注:该log的底数是2) 1.Pyt ...

  2. LeetCode 704. Binary Search (二分查找)

    题目标签:Binary Search 很标准的一个二分查找,具体看code. Java Solution: Runtime:  0 ms, faster than 100 % Memory Usage ...

  3. lintcode:Binary Search 二分查找

    题目: 二分查找 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1. 样例 ...

  4. STL模板整理 Binary search(二分查找)

    前言: 之前做题二分都是手动二分造轮子,用起来总是差强人意,后来看到STL才发现前辈们早就把轮子造好了,不得不说比自己手动实现好多了. 常用操作 1.头文件 #include <algorith ...

  5. 【算法模板】Binary Search 二分查找

    模板:(通用模板,推荐) 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1. ...

  6. Leetcode704.Binary Search二分查找

    给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: num ...

  7. [LeetCode] Binary Search 二分搜索法

    Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...

  8. 501. Find Mode in Binary Search Tree查找BST中的众数

    [抄题]: Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently oc ...

  9. Codeforces Round #678 (Div. 2) C. Binary Search (二分,组合数)

    题意:有长度\(n\)的序列,让你构造序列,使得二分查找能在\(pos\)位置找到值\(x\).问最多能构造出多少种排列? 题解:题目给出的\(pos\)是固定的,所以我们可以根据图中所给的代码来进行 ...

  10. LeetCode Binary Search All In One

    LeetCode Binary Search All In One Binary Search 二分查找算法 https://leetcode-cn.com/problems/binary-searc ...

随机推荐

  1. jQuery键盘事件绑定Enter键

    <script> $(function(){ $(document).keydown(function(event){ if(event.keyCode==13){ $("#mo ...

  2. 获取本机IP_考虑多网卡的情况

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  3. ajax入门详解

    l 一个实例 在开始正式讲解 Ajax之前,首先让我们先来看看Google Map使用Ajax改善其产品设计的效果. 1. 在浏览器地址栏中输入http://maps.google.com打开Goog ...

  4. manifest package

    http://www.android-doc.com/guide/topics/manifest/manifest-intro.html It names the Java package for t ...

  5. 栈的的链式实例LinkStack实现

    1.#include <stdio.h>#include <malloc.h>#include "LinkList.h"typedef struct _ta ...

  6. MyEclipse------黑科技

    自动计算器(+,-,*,/) <form method="post" oninput="o.value = parseInt(a.value) + parseInt ...

  7. android-android各大手机系统打开权限管理页面

    android系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框. 而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么去设置.这就导致了很不好的用户体验. 经 ...

  8. 如何查看LINUX 硬件配置信息

    如何查看LINUX 硬件配置信息 在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所 ...

  9. 【原创】ui.router源码解析

    Angular系列文章之angular路由 路由(route),几乎所有的MVC(VM)框架都应该具有的特性,因为它是前端构建单页面应用(SPA)必不可少的组成部分. 那么,对于angular而言,它 ...

  10. Call Paralution Solver from Fortran

    Abstract: Paralution is an open source library for sparse iterative methods with special focus on mu ...