/*
需求:在一个有序数组中,插入一个元素,保证数组有序,输出该元素的角标位置,
*/
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;
}
}