二分查找(Java实现)

  有没有正在学数据结构的?没学过C,只会Java的我表示算法好难 ┭┮﹏┭┮。

  废话不多说,分享一个很简单的二分查找,在有序数组(从小到大排序)中查找T类型的变量,我就直接用int 型了,数组第一个元素(下标为0的元素)不使用,实际查找从第二个元素(下标为1的元素)开始。

  全部代码分为两部分。

  1.方法类

 1 /*
 2  * 二分法在有序数组中查找变量k
 3  */
 4 public class BinarySearch {
 5 
 6     /*
 7      * 方法返回值为要查找的元素下标,若数组中没有待查找的元素k,则返回-1
 8      */
 9     int binarySearch(int[] array,int k) {
10         int left,right,mid;
11         final int NotFound=-1;
12         
13         left = 1;  //初始化左边界
14         right = array.length-1;  //初始化右边界
15         
16         while(left<=right) {
17             mid = (left+right)/2;
18             if(k<array[mid]) {
19                 right = mid-1;
20             }else if(k>array[mid]){
21                 left = mid+1;
22             }else {
23                 return mid;
24             }
25         }
26         
27         return NotFound;
28     }
29 }

  2.测试类

 1 /*
 2  * 二分查找测试类
 3  */
 4 import java.util.*;
 5 public class TestBinarySearch {
 6 
 7     public static void main(String[] args) {
 8         
 9         int[] array = {0,1,6,8,13,24,45,64,76,77,78,90,93};  //初始化数组,实际内容从第二个数开始,也就是下标为1的数开始
10         int index=-1;  //数组索引
11         
12         System.out.print("请输入你要查找的整数: ");
13         Scanner input=new Scanner(System.in);
14         int intentNum=input.nextInt();
15         
16         BinarySearch bs = new BinarySearch();
17         int sub=bs.binarySearch(array,intentNum);
18         
19         if(sub!=-1) {
20             index = sub;
21             System.out.println(array[index]+"在数组中的位置是 "+index);
22         }else {
23             System.out.println("没有找到‘"+intentNum+"’这个数。");
24         }
25         
26     }
27 
28 }

  测试类这个随意更改,binarySearch()方法是核心。

如果这篇文章对你有用的话,希望点个赞,支持一下作者,有什么更好的看法和建议欢迎评论区留言。Bye,下次见!

posted @ 2021-11-22 21:42  李家宇  阅读(596)  评论(0编辑  收藏  举报