小鑫的JAVA之路(8):简单算法之打擂台算法与二分法

打擂台算法

打擂台算法又叫做简单排序算法,为什么要叫他打擂台算法呢?同样是排序,但是他与冒泡排序的原理不同,冒泡排序上篇我们已经讲到,我们这里来说打擂台的原理,顾名思义,打擂台指的是一个人守擂,一个人打擂,如果擂主打赢了挑战者,那么擂主继续守擂,如果挑战者打败了擂主那么挑战者成为擂主。这就是打擂台算法的原理,换到一个数组来,就相当于我们指定一个数为擂主,用其他的数来跟他比较,那么如果挑战者赢了,他们两个的位置进行交换,继续下一个挑战者,直到没有挑战者。这样能决出第一名,一次是第二名,第三名,以此类推,直到排好序。那么我们分析一下,寻找第一名第二名是一个循环,寻找挑战者也是一个循环,所以我们采用双重for循环来做。
代码实现:

public static void main(String[] args) {
		int arr[]= {1,2,5,6,4,8,7,9,3};
		//定义数组
		for(int i = 0;i<arr.length-1;i++) {
		//控制擂主,也就是决出第一名第二名,第一次循环指定第一个数为擂主
			for(int j =i+1;j<arr.length;j++) {
			//指定挑战者,挑战者是擂主的下一位选手
				if(arr[i]>arr[j]) {
				//挑战
					int min = arr[i];
					arr[i] = arr[j];
					arr[j] = min;
					//换位
				}
			}
		}for(int i = 0;i<arr.length;i++) {
			System.out.println(arr[i]);
			//遍历集合
		}
	}

因为我们每次循环都会决出我们的第一名或者第二名,所以第一名第二名不用参加后面的比赛,把他的位置固定住,然后继续下面的比赛。这就是为什么叫做打擂台算法的原因。

二分法

二分法是通过不断的来取中间值来进行判断的,二分指的是什么呢?就是我们指定一个区间,区间里的最大值和最小值来进行加法运算,然后除以2来找到中间值,然后再用我们的中间值与我们想要找的值进行比较。如果中间值不等于我们要寻找的值,那么我们就需要继续二分寻找我们想要的数。
代码如下:

public static void main(String[] args) {
	int max = 100;
	//设置最大值
	int min = 0;
	//设置最小值
	Random random = new Random();
	//创建random随机数
	int a = random.nextInt(101);
	//定义随机数取值范围为0-100
	int m = (max+min) /2;
	//定义中间值
	while(m!=a) {
		if(m>a) {
		//比较
			max = m-1;
			System.out.println("你猜大了");
		}else {
		//比较
			min = m+1;
			System.out.println("你猜小了");
		}
		m = (max+min)/2;
	}
	System.out.println(m)}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值