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