Java练习(5)——折半查找扩展(插入元素)

来源:互联网 发布:新网域名转到腾讯云 编辑:程序博客网 时间:2024/06/06 10:31
/*需求:在一个有序数组中,插入一个元素,保证数组有序,输出该元素的角标位置, */public class halfsearch2 {public static void main(String[] args){int [] arry= {2,5,6,9,52};int index1=Half_1(arry,7);int index2=Half_2(arry,7);System.out.println("index1="+index1+'\n'+"index2="+index2);}/* 方法1,自己做的,改动较大,在折半查找基础上,不管原数组是否存在该元素 */static int Half_1(int [] arry,int value){int min = 0, max = arry.length-1;int mid= (min+max)>>1;//用if语句判断该元素与数组元素大小if(value>arry[max])mid=max;else if(value<arry[min])mid=min;else{while((max-min)!=1){if(value<arry[mid])max=mid;else if (value>arry[mid])min=mid;else break;mid = (min+max)>>1;}}return mid+1;}/*方案二,折半方法基础上改动,在原数组中查找该元素,找不到并不返回-1,而是min  */static int Half_2(int [] arry,int value){int min = 0, max = arry.length-1,mid = (min+max)/2;if(value>arry[max])mid=max+1;else if(value<arry[min])mid=min;else{while(arry[mid]!=value){if(value<arry[mid])max=mid-1;else min=mid+1;if(min>max)//找不到的情况下return min;mid = (min+max)/2;}}return mid;}}