有没有正在学数据结构的?没学过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,下次见!