二分查找非递归实现

  1. public class BinarySearchNoRecur {
  2. public static void main(String[] args) {
  3. //测试
  4. int[] arr = {1,3, 8, 10, 11, 67, 100};
  5. int index = binarySearch(arr, 100);
  6. System.out.println("index=" + index);//
  7. }
  8. //二分查找的非递归实现
  9. /**
  10. * @param arr 待查找的数组, arr是升序排序
  11. * @param target 需要查找的数
  12. * @return 返回对应下标,-1表示没有找到
  13. */
  14. public static int binarySearch(int[] arr, int target) {
  15. int left = 0;
  16. int right = arr.length - 1;
  17. while(left <= right) { //说明继续查找
  18. int mid = (left + right) / 2;
  19. if(arr[mid] == target) {
  20. return mid;
  21. } else if ( arr[mid] > target) {
  22. right = mid - 1;//需要向左边查找
  23. } else {
  24. left = mid + 1; //需要向右边查找
  25. }
  26. }
  27. return -1;
  28. }
  29. }

二分查找循环条件分析

while循环里面为什么必须要是left<=right而不能是left<right

假设arr={1,2,3};要查找的target=3; 第一步,left=0,right=2,mid=1;arr[mid]<3,所以left=mid+1=2; 如果循环跳出条件是left<right,此时就跳出循环了,得出结果为-1,所以需要<=