元素的查找:元素无序,循环遍历;元素有序,二分查找 - 时间复杂度O(logn),空间复杂度o(1)
1 class ArraySearch{ 2 public static void main(String[] args){ 3 /*//1.定义数组,无序 4 int[] arr={1,6,3,8,4}; 5 6 //要查找的数 7 int num=3; 8 9 //for循环实现 10 /*for(int i=0;i<arr.length;i++){ 11 //判断 12 if(arr[i]==num){ 13 System.out.println(i); 14 break; 15 } 16 }*/ 17 18 /*//增强for循环 19 int count=0; 20 for(int i:arr){ 21 if(i==num){ 22 System.out.println(count); 23 break; 24 } 25 26 count++; 27 }*/ 28 29 30 31 32 //2.有序数组的查找 33 //定义有序数组 34 int[] arr={1,2,3,5,7,9}; 35 36 //最小下标,最大数的下标,中间下标 37 int min=0; 38 int max=arr.length-1; 39 int mid=(min+max)/2; 40 41 //查找数 42 int num=9; 43 44 // 45 boolean flag=true; 46 47 // 48 while(arr[mid]!=num){ 49 //大于num 50 if(arr[mid]>num){ 51 max=mid-1; 52 } 53 54 //小于num 55 if(arr[mid]<num){ 56 min=mid+1; 57 } 58 59 //判断临界 60 if(min>max){ 61 System.out.println("数据有误"); 62 flag=false; 63 break; 64 } 65 //重新计算中间值 66 mid=(max+min)/2; 67 } 68 69 //输出下标 70 if(flag) 71 System.out.println(mid); 72 } 73 }