package searching; public class BinSearch_ { /** * binSearch:查找指定元素,并返回所在数组中的位置 * InsertToArray:元素插入到有序数组,并获取插入位置 * binSearchFirst:查找指定元素第一次出现的位置 * binSearchLast:查找指定元素最后一次出现的位置 */ public static void main(String[] args) { int[] a={3,5,10,10,10,13,13,19,23}; System.out.println(binSearch(a,23)); //8 System.out.println(InsertToArray(a,1)); //0 System.out.println(InsertToArray(a,4)); //1 System.out.println("first:"+binSearchFirst(a,10));//2 System.out.println("first:"+binSearchLast(a,10));//4 } private static int binSearch(int[] a, int key) { // TODO Auto-generated method stub int min=0,max=a.length-1; int mid=(max+min)/2; while(min<=max){ mid=(max+min)/2; if (key>a[mid]) { min=mid+1; }else if (key<a[mid]) { max=mid-1; }else { return mid; } } return -1; } private static int InsertToArray(int[] a, int key) { // TODO Auto-generated method stub int min=0,max=a.length-1; int mid=0; while(min<=max){ mid=(max+min)/2; if (key>a[mid]) { min=mid+1; }else if (key<a[mid]) { max=mid-1; }else { return mid; } } return min; } private static int binSearchFirst(int[] a, int key) { // TODO Auto-generated method stub int min=0,max=a.length-1; int mid=0; while(min<=max){ mid=(max+min)/2; if (key>a[mid]) { min=mid+1; }else{ max=mid; } if (max==min) { break; } } if (a[min]!=key) {//当查找元素不存在时,返回-1 return -1; }else { return min; } } private static int binSearchLast(int[] a, int key) { // TODO Auto-generated method stub int min=0,max=a.length-1; int mid=0; while(min<=max){ mid=(max+min+1)/2; if (key>=a[mid]) { min=mid; }else { max=mid-1; } if (max==min) { break; } } if (a[max]!=key) {//当查找元素不存在时,返回-1 return -1; }else { return max; } } }
有序数组的二分查找---查找元素第一次和最后一次出现的位置及元素存储
猜你喜欢
转载自blog.csdn.net/u014067137/article/details/80335310
今日推荐
周排行