在一些程序中 我们常常需要用到查找 由于 for循环效率太低 现在的一项目又需要数据量比较大的查找 所以将二分查找封装了!
/*
算法类 现在只有二分查找 binarySearch
*/
package utils{
public class Algorithm{
/*
*
* version :1.01
*
* author: 夜梦惊魂 _dreamnight
* blog : http://blog.csdn.net/hu3697
* email: hujun36978@yahoo.cn
*
* */
private static var index:int=0
/*
二分查找: 根据数组里面的值查它的索引,假如查到了就返回所在索引 ,否则返回 -1
该数组是有序数组 ,从小到大排列的
target 为索要查找的对象 函数返回的是该target对象 在数组中的索引,假如在数组中不存在就返回-1
用法:
var a:Array=[1,3,6,9,12,15,16,200,500]
var s:int=Algorithm.binarySearch(a,200);//搜索
trace(s)
*/
public static function binarySearch(array:Array,target:int):int{
Algorithm.reset();
return Algorithm.search(array,target);
}
private static function search(array:Array,target:int):int
{
var midIndex:int = int(array.length / 2);
var mid:int = array[midIndex];
if (target == mid){
trace("找到了");
index+=midIndex
trace(index);
return index
}
if (! midIndex)//mid 为0
{
trace("数组中不存在该值");
index=-1
return index;
}
var leftArray:Array = array.slice(0,midIndex);
var rightArray:Array = array.slice(midIndex,array.length);
if (target > mid)
{
index+=midIndex
search(rightArray,target);
}
else
{
//index+=midIndex
search(leftArray,target);
}
return index;
}
/*
将index重置为0 便于下一次搜索
*/
private static function reset():void{
index=0
}
}
}