文章内代码来自 http://www.cnblogs.com/wakerobin/archive/2009/10/12/1581914.html
二分法查找
二分法查找其实就是折半查找,一种效率较高的查找方法。针对有需数组来查找的。
主要思想是:(设查找的数组期间为array[low, high])
(1)确定该期间的中间位置K
(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:
a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]
b.array[k]
时间复杂度:O(log2n);
代码实现:
/// 二分法查找
/// 目标数组(已经排序好了)
/// 查找的数
/// 目标数的索引
public int BinarySearch(int[] array, int T)
{
int low, high, mid;
low = 0;
high = array.length - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (array[mid] < T)
{
low = mid + 1;
}
else if (array[mid] > T)
{
high = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
总结:二分法查找主要用于已经排序的数据中,查字典直接翻就是用了二分法的思想,因为字典正好是排序的。使用两个点来圈定比较的范围,初始范围是全部数据,然后寻找中间位置的数据,如果要找的数据比它大,则比较范围算小为0~中间位置的这块数据,否则是后一段数据,如此循环到结束。
网友评论