java-在数组中,用二分法查找一个数。返回下标,找不到则返回-1。

编写程序,完成下列功能:

(1)输入 20 个整数到数组中;

(2)对 20 个数按从大到小的顺序排序,输出排序后的数组;

(3)输入一个整数 x;

(4)在数组中,用二分法查找 x。如果找到了输出 x 在数组中的下标,找不到输出-1。

package labreport4;
import java.util.Scanner;
public class work4_4 {
	//输出数组
	static void display(int a[]) {
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		System.out.println("");
	}
	//冒泡法排序
	static void order(int a[]) {
		int i,j,temp;
		for(i=0;i<a.length;i++) {
			for(j=0;j<i;j++) {
				if(a[j]<a[i]) {
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
				}
			}
		}
	}
	//二分法查找
	static int binarySearch(int a[], int x) {
		int left = 0;//查找范围上限
		int right= a.length-1;//查找范围下限
		while (left <= right) {
			int mid = (left + right) / 2;//取查找范围中间的数
			if (x > a[mid])//比中间的数大,x不在右半部分
				right = mid - 1;//查找范围下限移到中间的左边
			else if (x < a[mid])//比中间的数小,x不在左半部分
				left = mid + 1;//查找范围上限移到中间的右边
			else //x==a[mid],找到了
				return mid;
		}
		return -1; //找不到
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]=new int[5];
		int j=0;
		Scanner input=new Scanner(System.in);
		for(j=0;j<a.length;j++) {
			a[j]=input.nextInt();
		}
		int i=input.nextInt();//输入要查找的数
		order(a);//从大到小排序
		display(a);//输出
		int b=binarySearch(a,i);//二分查找
		System.out.println(b);//输出查找结果
	}

}

 

二分查找是重点,首先确定查找的上下限,然后用中间下标数据与被找数作比较,如果中间下标数据较大,则最大下标等于中间下标-1;中间下标数据较小,则最小下标等于中间下标+1。直至两数相等,则返回中间下标。如若最小下标 > 最大下标,说明数据不存在,则返回-1。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值