[算法学习] 二分搜索

学编程也有段时间了,但是一直没有好好的去学习算法,只是一直追求语和法编程语言的功能等,现在感觉到,编程语言只是工具算法和思想才是核心。
最近在china-pub买了本算法的书,这次要好好学学了:mrgreen:

算法设计技巧与分析

现在说一下这本书介绍的第一个算法 二分搜索

如果要从一个队列a中找到一个元素j,一般我们可能会将j与a中的每一个元素进行比较,直到找到相同的为止,如果找不到就说明,a中没有该元素。
但是当a中有很多元素的时候,使用这种方法效率就会比较低。
如果队列a是有序的,比如从小到大排列。那么用二分搜索就能提高搜索效率
原理是将j先于a中间的一个元素a[mid]比较,如果j大于a[mid]那么就可以放弃j与a[mid]之前的元素的比较,相反要是j小于a[mid]那么就可以放弃j与a[mid]之后的元素的比较,这样一直找下去,直到a等于a[mid]为止,通过这样搜索,每次可以排除调一半的元素,这样效率就大大提高了。
以下是我用as实现的代码

function binarySearch(ary:Array, n:Number) :Number
{
   var low        :Number = 0;
   var heigh    :Number = ary.length-1;
   while(low<=heigh)
   {
       var mid:Number = Math.floor((low+heigh)/2);
       if(ary[mid]==n) return mid;
       else if(ary[mid]<n) low = mid+1;
       else if(ary[mid]>n) heigh = mid-1;
   }
   return -1;
}

源文件下载
好了,这就是书中介绍的第一个算法,这个算法还是比较简单的
如果发现有错误或bug请及时通知我改正,谢谢