获取某元素第一次出现的地方
1 public static int getIndex(int[] arrm,int key) { 2 for(int x=0;x<arrm.length;x++) { 3 if(arrm[x]==key) 4 return x; 5 } 6 return -1;//return -1:首先,要的一个角标,而返回-1,角标没有负数 7 8 }
二分查找:
前提:数组必须按顺序排序
1 public static int HalfSearch(int []arrs,int key) { 2 int min,max,mid; 3 min=0; 4 max=arrs.length-1; 5 mid=(max+min)/2; 6 while(arrs[mid]!=key) { 7 if(arrs[mid]<key) 8 min=mid+1; 9 else if(arrs[mid]>key) 10 max=mid-1; 11 if(max<min) 12 return -1;//此时说明 表中没有key次数据 13 mid=(max+min)/2; 14 15 } 16 return mid; 17 }
给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的
那么这个元素的存储的角标为如何获取(折半查找法)
1 public static int HalfSearch_1(int []arrs,int key) { 2 int min,max,mid; 3 min=0; 4 max=arrs.length-1; 5 mid=(max+min)/2; 6 while(arrs[mid]!=key) { 7 if(arrs[mid]<key) 8 min=mid+1; 9 else if(arrs[mid]>key) 10 max=mid-1; 11 if(max<min) 12 return min;//当数组中没有该数时,最终max=min-1; 13 mid=(max+min)/2; 14 15 } 16 return mid; 17 }
java已给代码:
Int index=Arrays.binarySearch(arr,45);
//返回正数就是数组中有该数,且返回位置,返回负数表示,该数应该排在返回{(负数的绝对值)-1 }的位置