---恢复内容开始---
1 class ArrayTest3 2 { 3 public static void main(String[] args) 4 { 5 //int [] arr=new int[]{54,45,6,5,34,656,34,2}; 6 //int index=GetIndex(arr,2); 7 //System.out.println("index="+index); 8 9 int [] arr1=new int[]{2,4,5,7,12,34,35,46,67,89,99}; 10 int index1=HalfSearch(arr1,34); 11 System.out.println("index1="+index1); 12 int index2=HalfSearch_2(arr1,34); 13 System.out.println("index2="+index2); 14 } 15 /* 16 折半查找的主要思想: 17 当所要查找的值(key)大于中间值(arr[mid]),则最小值的下标(min)变为中间值下标加1(mid+1), 18 如果所要查找的值小于中间值,则最大值的下标(max)变为中间值下标减1(mid-1), 19 查找到之后返回中值下标,否则返回-1。 20 */ 21 //折半查找效率较高,但是前提是数组必须是有序的 22 public static int HalfSearch(int [] arr,int key) 23 { 24 int min=0,max=arr.length-1,mid; 25 26 while(min<max)//当最小的值的下标大于最大值就跳出循环,说明查找不到指定的值 27 { 28 mid=(min+max)/2; 29 if(key>arr[mid]) 30 min=mid+1; 31 else if(key<arr[mid]) 32 max=mid-1; 33 else 34 return mid; 35 } 36 return -1; 37 } 38 39 //另一种折半排序的想法 40 public static int HalfSearch_2(int [] arr,int key) 41 { 42 int min=0,max=arr.length-1,mid; 43 mid=(min+max)/2; 44 while(arr[mid]!=key)//当中值不等于所指定的值,那就说明找不到(不存在)该值 45 { 46 mid=(min+max)/2; 47 if(key>arr[mid]) 48 min=mid+1; 49 else if(key<arr[mid]) 50 max=mid-1; 51 if(min>max) 52 return -1; 53 mid=(min+max)/2; 54 } 55 return mid; 56 } 57 58 59 60 //寻找数组值为key第一次出现的位置 61 public static int GetIndex(int arr [],int key) 62 { 63 for(int i=0;i<arr.length;i++) 64 { 65 if(arr[i]==key) 66 return i; 67 } 68 return -1; 69 } 70 }
---恢复内容结束---