Java实现二分法查找数组中某一个元素

简介: Java实现二分法查找数组中某一个元素


二分查找


算法思想:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。


1.非递归实现

/**
  * 非递归二分查找法
  * @param array 查询的数组
  * @param find 要查找的值
  * @return 值在数组中的位置
  */
  public static int search(int[] array, int find){
  if(array == null){
    return -1;
  }
  int start = 0;
  int end = array.length - 1;
  int middle = 0;
  while(start <= end){
    middle = (start + end) / 2;//中间的位置
    if(array[middle] == find){//中间值等于要查找的值,直接返回
    return middle + 1;
    }else if(array[middle] < find){//中间值小于要查找的值,就在中间值后面继续查找
    start = middle + 1;
    }else{//中间值大于要查找的值,就在中间值前面继续查找
    end = middle -1;
    }
  }
  return -1;//未查找到,返回-1
  }


2.递归实现


/**
  * 递归二分查找法
  * @param array 查询的数组
  * @param start 开始位置
  * @param end 结束位置
  * @param find 要查找的值
  * @return 值在数组中的位置
  */
  public static int search(int[] array, int start, int end, int find){
  if(array == null){
    return -1;
  }
  int middle = (start + end) / 2;//中间的位置
  if(start <= end){
    if(array[middle] == find){//中间值等于要查找的值,直接返回
    return middle + 1;
    }else if(array[middle] < find){//中间值小于要查找的值,就在中间值后面继续查找
    return search(array, middle + 1, end, find);
    }else{//中间值大于要查找的值,就在中间值前面继续查找
    return search(array, start, middle -1, find);
    }
  }
  return -1;//未查找到,返回-1
  }


目录
相关文章
|
4天前
|
Java
java8使用stream查找重复元素
java8使用stream查找重复元素
13 2
|
3天前
|
Java
环形数组链表(java)
环形数组链表(java)
6 0
|
9天前
|
Java 索引
杨老师课堂_Java教程第四篇之数组运用
杨老师课堂_Java教程第四篇之数组运用
17 0
|
7天前
|
Java 编译器 API
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
|
8天前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
15 1
|
11天前
|
Java 开发者
Java Set:一场与重复元素的“斗智斗勇”
【6月更文挑战第17天】Java的Set接口对抗重复元素,通过哈希(HashSet)和红黑树(TreeSet)策略保证唯一性。当元素尝试加入Set时,哈希函数识别重复,而元素增多时,TreeSet自动排序并维持高效查找。Set的智慧在于其内在的逻辑和数据结构,使其在集合世界中独具一格。
|
12天前
|
存储 Java
Java基础之数组
Java基础之数组
12 2
|
11天前
|
Java
那些与Java Set擦肩而过的重复元素,都经历了什么?
【6月更文挑战第17天】Java Set,独特元素的守护者,拒绝重复,激发成长。当重复元素被Set拒之门外,它们反思、蜕变,最终以独一无二的姿态融入Set的世界,展现每个元素的独特价值。这段代码旅程,既是数据结构的运用,也是关于自我发现的寓言。
|
2天前
|
Java 程序员 容器
五分钟学Java:打印Java数组最优雅的方式是什么?
五分钟学Java:打印Java数组最优雅的方式是什么?
|
3天前
|
机器学习/深度学习 算法 搜索推荐
Java数组(3)
Java数组(3)
17 0