修改折半查找使之能进行范围查找。

修改折半查找使之能进行范围查找。所谓范围查找是要找出在给定值a和b之间的所有元素(a<=b)。

思路:
折半循环查找的最终目的是使 a<=arr[mid]<=b,然后通过for循环输出满足条件的值。

public static void slove(int[] arr,int a,int b) {
		Arrays.sort(arr);
		System.out.println("排序后的数组:");
		for(int k : arr) {
			System.out.print(k+" ");
		}
		System.out.println();
		
		System.out.println("===========\n待查区间:["+a+","+b+"]");
		
		// 查找
		int mid = 0;
		int low = 0;
		int high = arr.length - 1;
		while(low <= high) {
			mid = (low+high)/2;
			if(arr[mid] < a) {				// arr[mid]不在[a,b]中,继续移动low指针
				low = mid + 1;			
			}else if(arr[mid] > b) {		// arr[mid]不在[a,b]中,继续移动high指针
				high = mid - 1;
			}else {							// arr[mid]在[a,b]中,通过遍历判断取[a,b]中的值
				System.out.println("===========\n最终结果:");
				for (int i = low; i<=mid; i++) {
					if (arr[i]>=a) {
						System.out.print(arr[i]+" ");
					}
				}
				for(int i=mid+1; arr[i]<=b; i++) {
					System.out.print(arr[i]+" ");
				}
				return ;					// 跳出
			}
		}
	}
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值