java学习 数组折半查找

我们如果想在数组中找到某个我们想要的值,很好想到 我们遍历整个数组 如果遍历的数组值与我们想要的值相等就返回此数组元素的下标。

public static int search(int[] arr,int key)  //普通查找 数组有序无序均可
	{
		for(int x = 0;x<arr.length;x++)          //遍历整个数组
		{
			if(arr[x] == key)					 //如果相等就返回下标
			{
				return x;
			}
		}
		return -1;								 //如果数组中不存在此元素则返回-1
	}

但是这种方法效率低下 需要遍历所有元素,即使数组元素是有序的也会遍历整个数组。

因此我们需要寻求一种简单便捷的方法(对于有序数组) 我们在此使用折半查找(二分法)来查找有序数组中的元素。

public static int halfSearch(int[] arr,int key) //不与系统的折半查找重名 随便起的
	{
		int min = 0;								//最小值下标 初值为0
		int max = arr.length-1;						//最大值下标 初值为长度减一
		int mid = (min+max)/2;						//中间值下标 初值为 (min + max) / 2
		while(min<=max)								//最小值下标肯定小于最大值下标 如果不满足说明没有找到此元素 所以return -1;
		{
			if(key>arr[mid])						//如果查找的值大于中间值 我们将最小值移到中间值右侧
			{
				min = mid+1;
				mid = (min+max)/2;
			}
			if(key<arr[mid])						//如果查找的值小于中间值,我们将最大值移到中间值左侧
			{
				max = mid -1;
				mid = (min+max)/2;
			}
			if(key == arr[mid])						//如果相等则返回其下标
				return mid;
		}
		return -1;
	}




为便于理解,以上为查找369的画图步骤。^<>^

当然请注意 折半查找只能对有序数组操作。

猜你喜欢

转载自blog.csdn.net/goddreamyyh/article/details/80313794
今日推荐