二分查找算法(Binary Search)的实现
来源:互联网 发布:node中res.query 编辑:程序博客网 时间:2024/06/15 00:06
用二分查找在已排序的数组中查看该数组是否含有一个特定的值是非常快速的,时间复杂度为O(lgn). 二分查找思想很简单,但是实现的时候会在边界条件上出现一些意想不到的问题。 现贴出自己写的程序,供大家参考。
第一个实现是基于迭代方式:
/// <summary>/// implement Binary Search algorithm through iteration approach./// </summary>/// <param name="array">a sorted array</param>/// <param name="key">key value </param>/// <returns>the position of the key in the array. If this key is not found, return -1</returns>public int BinarySearchIteration(int[] array, int key){ int begin = 0; int end = array.Length - 1; while (begin <= end) { int mid = begin + (end - begin) / 2; if (array[mid] > key) { end = mid - 1; } else if (array[mid] < key) { begin = mid + 1; } else { return mid; } } return -1;}
下一个是基于递归方式实现:
/// <summary>/// implement Binary Search algorithm through recursion approach./// </summary>/// <param name="array">a sorted array</param>/// <param name="begin">the search starting position</param>/// <param name="end">the search finishing position</param>/// <param name="key">the key value</param>/// <returns>the position of the key in the array. If this key is not found, return -1</returns>public int BinaraySearchRecursive(int[] array, int begin, int end, int key){ if (begin <= end) { int mid = begin + (end - begin) / 2; if (array[mid] > key) { return BinaraySearchRecursive(array, begin, mid - 1, key); } else if (array[mid] < key) { return BinaraySearchRecursive(array, mid + 1, end, key); } else { return mid; } } else { return -1; }}
这里应该注意两个地方:
一是对于mid 的值,应该用代码中的方式获得,不能通过 mid = (begin + end) /2 来取得,因为 begin + end 的值会有可能大于 int 的最大值。
二是要注意在 if 判断的时候用 <=, 没有必要用 <, 然后再去做判断,否则会多此一举,而且也让代码显得很难看。
参考文献:
1. http://www.zhuoda.org/weiking/67932.html
2. http://www.cppblog.com/converse/archive/2009/02/28/75190.html
- 二分查找算法(Binary Search)的实现
- 二分查找算法(Binary Search)的实现
- 二分查找(Binary Search)
- binary-search( 二分查找 )
- 二分查找Binary Search
- Binary Search二分查找
- 二分查找 Binary Search
- 二分查找(Binary Search)
- 二分查找 Binary Search
- Binary Search 二分查找
- Binary Search 二分查找
- Binary Search-二分查找
- 二分查找Binary Search
- 二分查找Binary Search
- 二分查找(binary search)
- 查找:二分查找(binary search)
- 算法导论第2章(3) 二分查找 binary search
- 常用算法——二分查找(Binary Search)
- Microsoft Audio Compression Manager (ACM) in C#.NET
- windows 2008 x64: 找不到MSDAORA Provider
- Unix下C语言----进程控制
- 而让人
- HTML5中的Canvas标签使用收录
- 二分查找算法(Binary Search)的实现
- SQL Server 2005 安装后没有SQL Server Management Studio
- 迈进Linux的征程
- java程序启动脚本(设置classpath)
- 动态规划 :POJ 1141 括号匹配
- 插入排序算法(Insertion Sort)的两种实现
- 如何获取网页CSS文件
- 使用FF&Firebug调试之CSS篇---让样式调整不再棘手
- PHP 中使用 SOAP(1)