二分查找算法

来源:互联网 发布:无线网搜索不到网络 编辑:程序博客网 时间:2024/05/30 04:29
 

二分查找算法

      二分查找又叫折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求被查找的表示有序表,且插入删除数据困难。所以,折半查找适合那些不经常变动但是查找频繁的有序列表。首先,假设有序表是按照升序排列的,以有序表的中间元素为分割点,把有序表为为左右两部分。取有序表中间的元素与待查值进行比较,如果待查值等于中间的元素,则返回待查值在有序表中的索引位置;如果待查值小于中间的元素,则在左侧部分继续查找待查值;如果待查值大于中间的元素,则在右侧部分继续查找待查值,依次循环,直到找到待查值为止。

    二分查找的Java代码实现如下:

package com.csdn.algorithm;public class TestBinarySearch {/** * @param args */public static void main(String[] args) {int[] aAfterSortArray = new int[] { 1, 4, 8, 12, 20, 24, 60, 80, 90 };int nDestValue = 8;int nResult = binarySearch(aAfterSortArray, nDestValue);System.out.println("查找值的索引::" + nResult);//输出结果为2,即8在数值中的索引值为2}/** * 二分查找算法,查找指定值在数组中的索引 *  * @param _aAfterSortArray * @param _nDestValue * @return */private static int binarySearch(int[] _aAfterSortArray, int _nDestValue) {// 1.参数验证if (_aAfterSortArray == null || (_aAfterSortArray.length == 0)) {return -1;}// 2.二分查找int nLow = 0;int nHigh = _aAfterSortArray.length;while (nLow < nHigh) {int nMiddle = (nLow + nHigh) / 2;if (_aAfterSortArray[nMiddle] == _nDestValue) {return nMiddle;} else if (_aAfterSortArray[nMiddle] < _nDestValue) {nLow = nMiddle + 1;} else {nHigh = nMiddle - 1;}}// 3.没有找到return -1;}}


 

原创粉丝点击