欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

同时求最大最小值

程序员文章站 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);
		
	}

}


运行结果:

同时求最大最小值

相关标签: 最大最小值