您的位置:首页 > 其它

折半查找,二分法查找

2011-12-13 14:13 162 查看
static int binSearch(int value) {
   int upperBound, lowerBound, mid;
   upperBound = arr.Length-1;
   lowerBound = 0;
   while(lowerBound <= upperBound) {
     mid = (upperBound + lowerBound) / 2;
     if (arr[mid] == value)
         return mid;
     else
     if (value < arr[mid])
         upperBound = mid - 1;
     else
         lowerBound = mid + 1;
   }
   return -1;
}
前提是这个集合是一个有序的组合,不然就不可以折半去找
折半的原理基本上就是把一个有序的集合从中间拆成两半,然后看中间序号的元素是否大于你要查找的值,如果小于就跳到后半段,从后半段的中间序号开始查
举例
想象你正在试图猜测一个朋友选出的1到100之间的数。对于你做出的每一次猜测,朋友告诉你是否猜到了正确的数字,或者你的猜测过大,又或者过小。最佳策略是选择50作为第一个猜测目标。如果猜测过大下一个你就猜25。如果50过小你再猜75。每一次猜测,你应当选择较小的范围或者较大的范围(由你的猜测是过大或过小而定)的中间点作为下一个猜测目标。只要遵守这个策略,你将最终猜到正确的数字。图4.1展示了在选定的数字是82的情况下这个方法的工作情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: