【正确答案】
【答案解析】以下5种解法可用于寻找数组中的最小值与最大值:
1)问题分解法。把本题看作两个独立的问题,而非一个问题,所以,每次分别找出最小值和最大值即可满足题意。此时,一共需要遍历两次数组,比较次数为2N(N表示数组的大小)次。
2)取单元素法。维持两个变量:min和max,min标记最小值,max标记最大值,每次取出一个元素,先与已找到的最小值比较,再与已找到的最大值比较。此种方法只需要遍历一次数组即可。
3)取双元素法。维持两个变量min和max,min标记最小值,max标记最大值,每次比较相邻两个数,较大者与max比较,较小者与min比较,通过比较找出最大值和最小值。此种方法的比较次数为1.5N次。
示例如下:
public class MaxMin{
static int Max;
static int Min;
public static void GetMaxAndMin(int arr[]){
Max=arr[0];
Min=arr[0];
int len=arr.length;
for(int i=1; i<len-1; i=i+2){
if(i+1>len){
if(arr[i]>Max)
Max=arr[i];
if(arr[i]<Min)
Min=arr[i];
}
if(arr[i]>arr[i+1]){
if(arr[i]>Max)
Max=arr[i];
if(arr[i+1]<Min)
Min=arr[i+1];
}
if(art[i]<arr[i+1]){
if(arr[i+1]>Max)
Max=arr[i+1];
if(air[i]<Min)
Min=arr[i];
}
}
}
public static void main(String[]args){
int[]array={7, 3, 19, 40, 4, 7, 1};
GetMaxAndMin(array);
System.out.println("max="+Max);
System.out.println("min="+Min);
}
}
程序运行结果为:
max=40
min=1
4)数组元素移位法。将数组中相邻的两个数分在一组,每次比较两个相邻的数,将较大值交换至这两个数的左边,较小值放于右边。对大者组扫描一次找出最大值,对小者组扫描一次找出最小值。此种方法需要的比较次数1.5N~2N次,但需要改变数组结构。
5)分治法。将数组划分成两半,分别找出两边的最小值、最大值,则最小值、最大值分别是两边最小值的较小者、两边最大值的较大者。此种方法的比较次数为1.5N次。