二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

原理:将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,

1. 如果x=a[n/2]则找到x,算法终止;

2. 如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x

3. 如果x>a[n/2],则我们只要在数组a的右 半部继续搜索

写法一:采用递归法

/// <summary>
/// 二分法查找,二分查找的条件是原数组有序
/// 没有找到,返回-1;找到了,则返回索引
/// </summary>
/// <param name="arr">数组</param>
/// <param name="low">开始索引</param>
/// <param name="height">结束索引</param>
/// <param name="value">要查找的对象</param>
static int BinarySearch(int[] arr, int low, int high, int value)
{ if (arr == null || arr.Length == 0 || low >= high)
{
return -1;
} int mid = (low + high) / 2;
if (value == arr[mid]) //刚好找到对象,返回索引
{ return mid;
}
else if (value > arr[mid]) // 要查找的对象在右边
{
return BinarySearch(arr, mid + 1, high,value);
}
else //要查找的对象在左边
{
return BinarySearch(arr, low, mid - 1, value);
} }

写法二:

         static int BinarySearch2(int[]arr,int value)
{
int low = 0, high = arr.Length - 1,mid=0; while (low <= high)
{
mid = (low + high) / 2;
if(value== arr[mid])
{
return mid;
}
if (value > arr[mid])//在右侧
{
low = mid + 1;
}
else//在左侧
{
high = mid - 1;
} } return -1;
}

运行结果

  static void Main(string[] args)
{
Console.WriteLine($"数据算法");
var arr1 = GetArrayData(8, 1, 22);
Console.WriteLine($"生成未排序数据arr1:{ShowArray(arr1)}");
//var arr2 = BubbleSort(arr1);
//Console.WriteLine($"冒泡排序:{ShowArray(arr2)}");
var arr3 = SelectSort(arr1);
Console.WriteLine($"选择排序arr3:{ShowArray(arr3)}");
var val = arr3[3]; var index= BinarySearch(arr3, 0, arr1.Length - 1,val);
Console.WriteLine($"{val}在 arr3中出现的索引位置是{index}");
var val2 = arr3[4];
var index2 = BinarySearch2(arr3, val2);
Console.WriteLine($"{val2}在 arr3中出现的索引位置是{index2}");
Console.ReadLine();
}

C#查找算法1:二分查找的更多相关文章

  1. 数据结构与算法之PHP查找算法(二分查找)

    二分查找又称折半查找,只对有序的数组有效. 优点是比较次数少,查找速度快,平均性能好,占用系统内存较少: 缺点是要求待查表为有序表,且插入删除困难. 因此,折半查找方法适用于不经常变动而查找频繁的有序 ...

  2. python实现查找算法:二分查找法

    二分查找算法也称折半查找,基本思想就是折半,和平时猜数字游戏一样,比如猜的数字时67,猜测范围是0-100,则会先猜测中间值50,结果小了,所以就会从50-100猜测,中间值为75,结果大了,又从50 ...

  3. Java查找算法之二分查找

    二分查找是一种查询效率非常高的查找算法.又称折半查找. 一.算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功. 一个情景:将表中间位置 ...

  4. python数组查找算法---bisect二分查找插入

    1 实例 这个模块只有几个函数, 一旦决定使用二分搜索时,立马要想到使用这个模块 [python] view plaincopyprint? import bisect L = [1,3,3,6,8, ...

  5. 【算法】二分查找法&大O表示法

    二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...

  6. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){ if ( ...

  7. C语言查找算法之顺序查找、二分查找(折半查找)

    C语言查找算法之顺序查找.二分查找(折半查找),最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 顺序查找 /*顺序查找 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的 ...

  8. 算法入门——二分查找,旅行商问题,大O表示法

    一. 算法入门 博主在市面上发现了很多,很多有关书算法的书籍,但是真正能够让初学者易懂的算法书籍,只是一点点,以下我讲以 Aditya Bhargava写的一本关于算法的入门书籍,为参考,这本书非常的 ...

  9. 分治算法(二分查找)、STL函数库的应用第五弹——二分函数

    分治算法:二分查找!昨天刚说不写算法了,但是突然想起来没写过分治算法的博客,所以强迫症的我…… STL函数库第五弹——二分函数lower_bound().upper_bound().binary_se ...

  10. PHP算法之二分查找和顺序查找

    一.二分查找 (数组里查找某个元素) /** * 二分查找 (数组里查找某个元素) * $k为要查找的关键字(注:待查找的数组元素为奇数个)$low为查找范围的最小键值,$high为查找范围的最大键值 ...

随机推荐

  1. [ABC313F] Flip Machines

    Problem Statement There are $N$ cards numbered $1$ through $N$. Each face of a card has an integer w ...

  2. DHorse v1.5.0 发布,基于 k8s 的发布平台

    版本说明 新增特性 支持同一机器部署多个DHorse服务: 支持Next..NET应用部署: 优化Node.Nuxt应用构建和部署的性能: 默认使用fabric8客户端与k8s集群交互,可以通过指定参 ...

  3. 华企盾DSC导致wps个人模式无策略组新建的文件仍然加密

    解决方法:右键wps安装目录手动解密即可(原因:wps模板被加密导致)

  4. Java数组常见的几种排序。

    public class code2 { public static void main(String[] args) { int[] x = {37, 89, 23}; for (int z = 0 ...

  5. Serverless 架构就不要服务器了?

    摘要:Serverless 架构不是不要服务器了,而是依托第三方云服务平台,服务端逻辑运行在无状态的计算容器中,其业务层面的状态则被开发者使用的数据库和存储资源所记录. Serverless 是什么 ...

  6. LiteOS基于Sensorhub的超声波模组移植

    摘要:本文为你带来LiteOS基于Sensorhub的超声波模组移植的应用. 1.Sensor Hub LiteOS传感框架即Sensor Hub,是一个基于Huawei LiteOS物联网操作系统的 ...

  7. 初识GaussDB(for Cassandra)

    摘要:GaussDB(for Cassandra)是一款基于华为自主研发的计算存储分离架构的分布式云数据库服务. "local quorum查询某个分区键的条数,每次查询,条数都不一样.&q ...

  8. 对象存储只能按文件名搜索,你out了吧

    摘要:不少大公司的一个桶里都是几亿几十亿的对象,那他们都是怎么检索的呢? 本文分享自华为云社区<对象存储只能按文件名搜索? 用 DWR + ElasticSearch 实现文件名.文件内容.图片 ...

  9. PanGu-Coder:函数级的代码生成模型

    摘要:华为诺亚方舟实验室语音语义实验室联合华为云PaaS技术创新实验室基于PanGu-Alpha研制出了当前业界最新的模型PanGu-Coder 本文分享自华为云社区<PanGu-Coder 函 ...

  10. 万物皆可Cassandra:HUAWEI Tag背后的神仙数据库

    摘要:在GaussDB(for Cassandra)的支撑下,HUAWEI Tag防丢精灵表现出了非常强大的核心竞争力. 本文分享自华为云社区<万物皆可Cassandra--HUAWEI Tag ...