二分法查找案例

public class BinarySearch {

public static int binarySearch(int[] arr, int num) {
  int start = 0; //起始下标
  int end = arr.length - 1; //数组末下标

  while(start <= end) { //循环终止条件为起始下标小于等于末尾下标
    int mid = (start + end) / 2 ; //查找的中间“范围”
    if (arr[mid] < num) { //如果查找的数小于数组中间的数,说明这个数在mid的右边,起始位置便重新
      start = mid + 1; //被赋值为中间位置 + 1,然后从这个新赋值的位置(start)到最后位置(end)的范围中间进行匹配
    }
    else if (arr[mid] > num){//如果查找的数于大数组中间的数,说明这个数在mid的左边,起始位置便重新
      end = mid - 1; //被赋值为中间位置 - 1,然后从这个起始位置(start)到新赋值的位置(end)的范围中间进行匹配
    }
    else{
      return mid; //表示找到这个数,返回这个数的所在下标
    }
  }
  return -1; //表示未找到,返回-1
}
public static void main(String[] args) {
  int[] arr = new int[] {23, 11, 56, 55, 87, 34, 57, 10, 33};

  //二分法查找的首要前提是对有序的数组进行操作
  for (int i = 0; i < arr.length; i++) { //冒泡排序
    for (int j = arr.length - 1; j > i; j--) {
      if (arr[j - 1] > arr[j]) {
        int temp = arr[j - 1];
        arr[j - 1] = arr[j];
        arr[j] = temp;
      }
    }
  }


  int num = 87; //要查找的数
  int index = binarySearch(arr, num);

  if (index >= 0) { //表示找到这个数的位置
    System.out.print("下标为:" + index);
    System.out.println( ",值为:" + arr[index]);
  }
  else {
    System.out.println("未能找到该数!");
  }
}

}

posted @   ZephyrLux  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示