Java二分查找法

public static void main(String[] args) {
		// 二分查找法
		int [] arr = {1,5,7,9,3};
		// 前提:数列有序
		int temp;
		// 冒泡升序排序
		for(int i = 0 ; i < arr.length - 1; i ++){
			boolean isSorted = true;
			for(int j = 0; j < arr.length - 1 -i; j ++){
				if(arr[j] > arr[j + 1]){
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
					isSorted = false;
				}
			}
			if(isSorted)
				break;
		}
		// 二分查找
		Scanner superman = new Scanner (System.in);
		int num;
		System.out.println("-- 输入要查找的数字:");
		num = superman.nextInt();//
		//
		int start = 0;// 起始位置
		int end = arr.length - 1;// 终止位置
		int mid = (start + end) /2 ;// 中间位置
		/*
		 *循环查找
		 *如果要查找的数比mid位置的大,则mid+1作为起始位置
		 *如果要查找的数比mid位置的小,则mid-1作为终止位置
		 *当要查找的数等于mid位置的数,查找成功
		 */
		while(start <= end){// start > end
			if(num > arr[mid]){
				start = mid + 1;
			}else if(num < arr[mid]){
				end = mid -1;
			}else{
				// 相等
				System.out.println("存在:" + mid);
				return;//结束
			}
			mid = (start + end) /2 ;// 重新计算中间位置
		}
		System.out.println("不存在:" + (-mid-1));
		
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值