折半查找,二分法查找

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的情况下这个方法的工作情况。折半查找,二分法查找_第1张图片


你可能感兴趣的:(工作)