本文共 1673 字,大约阅读时间需要 5 分钟。
/** * 二分查找,等于某个值的位置,非递归 * @param data */public static int binarySearch1(int[] data,int val){ if(data == null || data.length ==0){ return -1; } int low = 0; int high = data.length; while (low <= high){ int midden = low+((high - low)>>1); if(data[midden]>val){ high = midden -1; }else if(data[midden]high) return -1; int midden = low +((high-low)>>1); if(data[midden]>val){ return searchInternally(data,low,midden - 1,val); }else if(data[midden] >1); if(data[midden]>val){ high = midden -1; }else if(data[midden] >1); if(data[midden]>val){ high = midden - 1; }else if(data[midden] >1); if(data[midden]>=val){ if(midden == 0 || data[midden - 1] >1); if(data[midden]<= val){ if(midden == high || data[midden+1]>val)return midden; }else { high = midden - 1; } } return -1;}public static void main(String[] args) { int[] data = {1,2,3,4,5,6,7,8,9}; int val = 4; int position = binarySearch1(data,val); System.out.println(val+" 的位置为:"+position); System.out.println(val+" 的位置为:"+searchInternally(data,0,data.length,val)); int[] data2 = {1,2,3,4,5,5,5,6}; val = 5; System.out.println("第一个 "+val+" 出现的位置为:"+searchFirstVal(data2,val)); System.out.println("最后一个 "+val+" 出现的位置为:"+searchLastVal(data2,val)); int[] data3 = {1,2,3,4,6,7}; val = 5; System.out.println("第一个大于或等于 "+val+" 出现的位置为:"+searchGtEVal(data3,val)); val = 7; System.out.println("最后一个小于或等于 "+val+" 出现的位置为:"+searchGtEVal(data3,val));}
转载地址:http://bhsvi.baihongyu.com/