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. PL/0编译器(java version)–Praser.java

    1: package compiler; 2:   3: import java.io.IOException; 4: import java.util.BitSet; 5:   6: /** 7: ...

  2. POJ2965The Pilots Brothers' refrigerator(枚举+DFS)

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22057 ...

  3. Extjs Form用法详解(适用于Extjs5)

    Extjs Form是一个比较常用的控件,主要用来显示和编辑数据的,今天这篇文章将介绍Extjs Form控件的详细用法,包括创建Form.添加子项.加载和更新数据.验证等. 本文的示例代码适用于Ex ...

  4. c++模板库(简介)

    目 录 STL 简介 ......................................................................................... ...

  5. js校验表单后提交表单的三种方法总结

    第一种: 复制代码 代码如下: <script type="text/javascript">         function check(form) { if(fo ...

  6. SQL注入原理小结

    今天,一基友问我一个问题说:为什么SQL注入要加单引号,这个当时我一时也回答不上,怪就怪自己理论太菜,不过回去仔细思考了一下,觉得这个问题也是蛮简单的. 首先大家应该明白的一点就是SQL注入的目的:加 ...

  7. IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)

    IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...

  8. Entity Framework ModelFirst尝试

    前言 Model First我们称之为“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,此时你的应用并没有设计相关数据库,在Visual Stu ...

  9. 2012年湖南省程序设计竞赛E题 最短的名字

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1115 解题报告:输入n个字符串,让你求出可以用来区别这些字符串的最少的前缀总共有多少个字 ...

  10. JSONKit 简单使用

    http://blog.csdn.net/l_ch_g/article/details/8477187 例子上写的比较浅显易懂, 不过我还是稍微总结一下: 导入JSONKit.h之后 字符串转NSDi ...