【Java练习】折半查找扩展(插入元素)

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值