C#二分查找算法设计实现

1.介绍

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

2.查找算法过程

举例就一个int类型数组为例 比如int[] intArray;

假设数组中元素是按升序排列,将数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

复杂度:O(lg n),n为要查找的元素个数。

3.算法要求

  1. 必须采用顺序存储结构。
  2. 必须按关键字大小有序排列。

4.算法实现

这里以C#代码实现

4.1递归方法

         /// <summary>
/// 二分查找递归实现
/// </summary>
/// <param name="arr">数组</param>
/// <param name="low">开始索引 0</param>
/// <param name="high">结束索引 </param>
/// <param name="key">要查找的对象</param>
/// <returns>返回索引</returns>
public static int BinarySearch(int[] arr, int low, int high, int key)
{
int mid = (low + high) / ;//中间索引
if (low > high)
return -;
else
{
if (arr[mid] == key)
return mid;
else if (arr[mid] > key)
return BinarySearch(arr, low, mid - , key);
else
return BinarySearch(arr, mid + , high, key);
}
}

4.2While循环实现

         /// <summary>
/// 二分查找While循环实现
/// </summary>
/// <param name="nums">数组</param>
/// <param name="low">开始索引</param>
/// <param name="high">结束索引</param>
/// <param name="target">要查找的对象</param>
/// <returns>返回索引</returns>
public static int BinaryWhile(int[] nums, int low, int high, int target)
{
while (low <= high)
{
int middle = (low + high) / ;
if (target == nums[middle])
{
return middle;
}
else if (target > nums[middle])
{
low = middle + ;
}
else if (target < nums[middle])
{
high = middle - ;
}
}
return -;
}

5.测试代码

         static void Main(string[] args)
{
int[] intArray = new int[] { ,,,,,,,,,};
int result = BinarySearch(intArray,,intArray.Length-,);
Console.WriteLine(result.ToString());
Console.WriteLine("-------------------------------------------");
int resuleWhile = BinaryWhile(intArray,,intArray.Length-,);
Console.WriteLine(resuleWhile.ToString());
Console.Read();
}

6.输出结果

7.源代码工程下载

源码工程项目文件下载

C#二分查找算法设计实现的更多相关文章

  1. python函数(4):递归函数及二分查找算法

    人理解循环,神理解递归!  一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...

  2. Java实现的二分查找算法

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

  3. c#-二分查找-算法

    折半搜索,也称二分查找算法.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: B 如果某一特定元素大于或者小 ...

  4. 二分查找算法(JAVA)

    1.二分查找又称折半查找,它是一种效率较高的查找方法. 2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位 ...

  5. 二分查找算法java实现

    今天看了一下JDK里面的二分法是实现,觉得有点小问题.二分法的实现有多种今天就给大家分享两种.一种是递归方式的,一种是非递归方式的.先来看看一些基础的东西. 1.算法概念. 二分查找算法也称为折半搜索 ...

  6. Java学习之二分查找算法

    好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...

  7. python实现二分查找算法

    二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法.搜索过程是从数组中间元素开始的 如果中间元素正好是要查找的元素,则搜索过程结束:如果查找的数大于中间数,则在数组 ...

  8. 剑指Offer——二分查找算法

    剑指Offer--二分查找算法 前言 本片博文主要讲解查找算法的相关知识.重点介绍二分查找. 二分查找算法是在有序数组中用到的较为频繁的一种查找算法,在未接触二分查找算法时,最通用的一种做法是,对数组 ...

  9. C++二分查找算法演示源码

    如下内容段是关于C++二分查找算法演示的内容. #include <cstdio>{ int l = 0, r = n-1; int mid; while (l <= r){ mid ...

随机推荐

  1. 【最大公约数&链表】权值 @upcexam5921

    时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定一个长为n的正整数序列Ai.对于它的任意一个连续的子序列{Al, Al+1, …, Ar},定义其权值W (l, r)为其长度与序列中所 ...

  2. JSAP105

    JSAP105 1.目标 2.一次性定时器 window.setTimeout(函数,时间); 参数列表同window.setInterval,同样返回timeID.只能定时一次,但不意味着不需要清理 ...

  3. Creating a NuGet Package in 7 easy steps - Plus using NuGet to integrate ASP.NET MVC 3 into existing Web Forms applications

    UPDATE: Check out my follow up post where I remove the need for editing the Global.asax.cs and show ...

  4. set 容器的用法

    1.set容器的理解 所有元素都会根据元素的键值自动排序,set元素的键值就是实值,实值就是键值.set不允许两个元素有相同的键值.(set的元素不像map那样可以同时拥有实值(value)和键值(k ...

  5. ViewPager Fragment 懒加载 可见 总结 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. Mockito-简单使用使用

    参考案例:(本位使用markdown编写) git.oschina实例:https://gitee.com/lhhTestTool/LhhMockito # LhhMockitomock 单元测试 M ...

  7. PHP性能分析——xhprof(window 安装xhporf)

    1 下载xhprof的php扩展 因为官方的xhprof不支持php7,所以采用tideways版本的xhprof 下载地址:windows版tideways_xhprof 将windows版的dll ...

  8. numpy.trace对于三维以上array的解析

    numpy.trace是求shape的对角线上的元素的和,具体看 https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.t ...

  9. 【转】关于提示can't load package 'xxx.bpl.' 错误问题的解决方法

      转自: http://blog.sina.com.cn/s/blog_44fa172f0102v9x3.html         'xxx.bpl'包实际存在, 路径并且正确. 但是总提示'can ...

  10. 【C#】C#线程_计算限制的异步操作

    目录结构: contents structure [+] 线程池简介 执行上下文(Execution Context) CancelTokenSource的使用 ThreadPool Task和Tas ...