JAVA折半查找法

class ArrayFind 
{
	public static void main(String[] args) 
	{

		int[] arr = new int[]{1,6,9,11,18,54,60,66,90};
		System.out.print("find 18 from array:");
		printArr(arr);
		System.out.println("find result is(halfSearch):" + halfSearch_2(arr, 18));
		System.out.println("find result is(halfSearch_2):" + halfSearch_2(arr, 18));

	}//end of method main

	//打印一个数组
	public static void printArr(int[] arr)
	{
		for (int x = 0; x<arr.length; x++ )
		{
			if (x == arr.length - 1)
			{
				System.out.println(arr[x]);
				break;
			}
			System.out.print(arr[x] + ",");
		}
	}//end of method printArr

	//折半查找法
	public static int halfSearch(int[] arr, int key)
	{
		int max = arr.length - 1;
		int min = 0;
		int mid = (max + min)/2;
		while (arr[mid] != key)
		{
			if (key>arr[mid])
			{
				min = mid + 1;
			}
			else if (key<arr[mid])
			{
				max = mid - 1;
			}
			if (min>max)
			{
				return -1;
			}
			mid = (max + min)/2;
		}//end of while
		return mid;

	}//end of method halfSearch

	//折半查找的第二种方式
	public static int halfSearch_2(int[] arr, int key)
	{
		
		int max = arr.length - 1;
		int min = 0;
		int mid = (max + min)/2;
		while (min <= max)
		{
			if ( key > arr[mid] )
			{
				min = mid + 1;
			}
			else if ( key < arr[mid] )
			{
				max = mid - 1;
			}
			else if (key == arr[mid])
			{
				return mid;
			}
			mid = ( max + min ) / 2;
		}//end of while

		return -1;
	
	}//end of method halfSearch

}//end of class ArrayFind

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值