算法之二分法查找

文章内代码来自 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~中间位置的这块数据,否则是后一段数据,如此循环到结束。

你可能感兴趣的:(算法之二分法查找)