用二分查找法找数字

该博客展示了如何通过二分查找法在经过冒泡排序后的有序数组中查找指定数字,通过用户输入实现动态查找,并输出数字在数组中的位置。

package day1_test;

import java.util.Scanner;

public class Dmon3 {

public static void main(String[] args) {
	// 练习二分查找法
	int [] a= {38,43,5,536,43453,24,45,6,2};
	int temp;
	for(int i = 0;i<a.length;i++) {//这是表示轮数
		for(int j =0;j<a.length-i-1;j++) {//内层循环表示每一轮要进行几次比较
			if(a[j]>a[j+1]) {//判断交换条件
				temp =a[j];
				a[j]=a[j+1];
				a[j+1]=temp;//二分查找先需要一个有序的数组用之前的冒泡排序排好了
			}
		}
	}
	for(int i=0;i<a.length-1;i++)
		System.out.print(a[i]+" ");//到这里只是建立了一个有序的数组
	int maxNum = a.length-1,minNum = 0, centre = (maxNum+minNum)/2;//确立查找范围
	int count=1;//建立一个判断变量判断是否输出是数组中的第几个值
	System.out.println("piease input number");//提示信息
	Scanner input=new Scanner(System.in);//用户输入想查找的数字
	int Number =input.nextInt();
	while(true) {//这里用while循环是因为我们并不知道查找次数
		if(a[centre]>Number) {
			maxNum=centre -1;//当要查的数字小于中间数时让最大数的范围变成中间数前一个因为中间数已经比较过了所以是前一个
		}
		else if(a[centre]<Number) {
			minNum=centre+1;//同理
		}
		else {
			break;//当只有最大值和最小值相等时跳出循环中间数是我们要找的数
		}
		centre = (maxNum+minNum)/2;//如果没有找到则变换为新范围的中间值
		if(maxNum<minNum) {
			System.out.println("数字不存在");//当最大值跳到最小值后面时说明全部查完后也没有找到
			count=-1;//用于判断下面的是否输出
			break;
		}
	}
	if(count!=-1);//
	System.out.println("你输入的数字是第"+(centre+1)+"个");
	
}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值