注:一定是有序的数组,才可以使用这种算法,如果数组没有排序则先进行排序后再调用此方法。

1、二分法是做什么的呢?

当然是查找数组中的数据了,开个玩笑,哈哈哈。

2、为啥要用这种方式呢?

二分顾名思义,就是将一组数据对半分开(比如左右两部分,下面用左右数组表示),从中间位置开始查找,

如果中间这个值正是咱们要找的值则直接返回这个值(或者索引),如果没有找到,那么去判断中间的这个值和咱们要找的值哪个大,

如果中间值比咱们要找的值大,则将之前分开的数组的左面的数组再进行对半分开,递归直到找到咱们要的那个值才会结束,反之亦然,

但是如果就是没有咱们找的那么岂不是死循环了嘛,

所以要加判断,如果递归到开始索引大于结束索引,也就是查到最后了还是没有找到匹配的值,则退出。

这种搜索算法每一次比较都使搜索范围缩小一半,这样对于大数据量的数组,极大的提升了查找效率。

        private void button1_Click(object sender, EventArgs e)
{
int[] arry = { , , , , , , , , };
//测试 要找的数字是15
int key = ;
//查找数并返回 若有,返回该数,没有则返回-1
int rr = BinarySearch(arry, , arry.Length - , key);
} /// <summary>
/// 二分法查找指定值
/// </summary>
/// <param name="arr">目标数组</param>
/// <param name="start">开始索引</param>
/// <param name="end">结束索引</param>
/// <param name="key">要查找的关键字</param>
/// <returns></returns>
public static int BinarySearch(int[] arr, int start, int end, int key)
{
int mid = (start + end) / ;
if (start > end)
return -;//查找不到返回-1
else
{
Console.WriteLine(arr[mid]);//监测查找了哪些数字
if (arr[mid] == key)
return mid;//若查找到,返回该数
else if (arr[mid] > key)
return BinarySearch(arr, start, mid - , key);
else return BinarySearch(arr, mid + , end, key);
}
}

 

最新文章

  1. java中log4j用法详细讲解和一些小总结
  2. codeforces 734E(DFS,树的直径(最长路))
  3. 为什么PCB上的单端阻抗控制50欧姆
  4. 【代码笔记】iOS-单项选择框
  5. 从Wep page到Application
  6. windows初始化后做了哪些事情
  7. 第二章 开始学习C++
  8. windows系统下Python环境的搭建
  9. Python串口操作纸币器1
  10. OSSchedLock()函数透析
  11. Installshield停止操作系统进程的代码--IS5版本适用
  12. ngx.re.match使用示例
  13. Love2D游戏引擎制作贪吃蛇游戏
  14. post方式接口测试(一)_新建测试用例
  15. 在Repeater中使用DropDownList的方法
  16. apply、call
  17. laravel中的plicy授权方法:
  18. 手机访问PC端
  19. Tomcat:IOException while loading persisted sessions: java.io.EOFException
  20. 如何把JavaScript数组中指定的一个元素移动到第一位

热门文章

  1. dell装系统
  2. SELECT command denied to user &#39;&#39;@&#39;%&#39; for column &#39;xxx_id&#39; in table &#39;users_xxx&#39; 权限问题
  3. linux 位操作
  4. linux 在启动时获得专用的缓冲
  5. Spring Security学习笔记-自定义Spring Security过滤链
  6. 2018-2-13-win10-uwp-绑定静态属性
  7. Java虚拟机-类文件结构
  8. HDU6581 Vacation (HDU2019多校第一场1004)
  9. 【Repo】repo sync:error.GitError: cannot initialize work tree
  10. 如何在ClickOnce 应用中使用 GitVersion