同时求最大最小值
程序员文章站
2024-03-15 21:21:12
...
分别独立地找出最大值和最小值,需要各比较n-1次,共需2n-2次比较,其实我们只需要最多1.5n次比较就可以同时找出最大值和最小值
算法思想是每次输入一对数(x,y),先比较x和y,再将二者中较大的元素与当前的max比较,将较小的元素与当前的min比较,这样每2个数就相当于只比较了3次
具体实现时,如何设定最大值和最小值得初始值依赖于n是奇数还是偶数。当n是奇数是,就将最大值和最小值都设为第一个元素的值,然后成对的处理余下的元素;如果n是偶数,就对前两个数做一次比较,以决定最大值和最小值的初始值,然后与n是奇数的情形一样,成对的处理剩余的元素。
java实现:
public class MinAndMax {
public static void main(String[] args) {
int[] A = new int[10];
for(int i = 0;i < A.length;i++) {
A[i] = (int)(Math.random() * 10);
System.out.print(A[i] + " ");
}
System.out.println("");
int min,max;
//n为奇数的情况
if(A.length % 2 == 1) {
min = A[0];
max = A[0];
for(int i = 1;i < A.length;i+=2) {
if(A[i] > A[i+1]) {
if(A[i] > max)
max = A[i];
if(A[i+1] < min)
min = A[i+1];
}
else {
if(A[i+1] > max)
max = A[i+1];
if(A[i] < min)
min = A[i];
}
}
}
//n为偶数的情况
else {
if(A[0] > A[1]) {
max = A[0];
min = A[1];
}
else {
max = A[1];
min = A[0];
}
for(int i = 2;i < A.length;i+=2) {
if(A[i] > A[i+1]) {
if(A[i] > max)
max = A[i];
if(A[i+1] < min)
min = A[i+1];
}
else {
if(A[i+1] > max)
max = A[i+1];
if(A[i] < min)
min = A[i];
}
}
}
System.out.println("min: " + min + " max: " + max);
}
}
上一篇: 生成一个给定的度分布的图
下一篇: networkx常用操作记录