以下是关于获取数组里的最大值和最小值的几种方法:
方法一
该方法使用交换顺序来寻找最大值,但查找完以后会污染数组,不能同时运行寻最大值方法和最小值方法。
/*获取数组里的最大值和最小值*/
public class TestFindArrayNum {
public static void main(String[] args) {
int[] arr = {500,11,12,100,11,13,1,3,5,205,7,9,2,4,6,8,400,0,300,10};
findMaxNum(arr);
//使用寻找最小值方法之前要先注释掉寻找最大值的方法
//因为使用完寻找最大值的方法后会污染数组,整个数组都会变为最大值500
//findMinNum(arr);
}
private static void findMaxNum(int[] arr) {
int maxNum = 0;
for (int i = 0; i <arr.length-1 ; i++) {
if(arr[i+1]>arr[i]){
maxNum = arr[i+1];
}else{
arr[i+1]=arr[i];
maxNum = arr[i];
}
}
System.out.println("数组中最大值是"+maxNum);
}
private static void findMinNum(int[] arr) {
int minNum = 0;
for (int i = 0; i <arr.length-1 ; i++) {
if (arr[i+1]<arr[i]){
minNum = arr[i+1];
}else {
arr[i+1] =arr[i];
minNum = arr[i];
}
}
System.out.println("数组中最小值是"+minNum);
}
}
方法二
方法二代码更加简洁且不会污染数组
/*获取数组里的最大值和最小值*/
public class TestFindArrayNum2 {
public static void main(String[] args) {
int[] arr = {500,11,12,100,11,13,1,3,5,205,7,9,2,4,6,8,400,0,300,10};
findMaxNum(arr);
findMinNum(arr);
}
private static void findMaxNum(int[] arr) {
int max = arr[0];
for (int i = 1; i <=arr.length-1 ; i++) {
if (max<arr[i]){
max=arr[i];
}
}
System.out.println("数组中最大值"+max);
}
private static void findMinNum(int[] arr) {
int min = arr[0];
for (int i = 1; i <=arr.length-1 ; i++) {
if (min>arr[i]){
min=arr[i];
}
}
System.out.println("数组中最小值"+min);
}
}
但是方法二称不上最优算法,假设数组中有n个元素,因为最差的情况要比较 2*(n-1)次,即2n-2次。
arr[0]要和接下来的n-1个数比较一次,要找到最大值和最小值即要比较两个n-1次。
方法三
public class TestFindArrayNum3 {
private int max;
private int min;
public int getMax() {
return max;
}
public int getMin() {
return min;
}
public void FindMaxAndMin(int[] arr ){
if (arr==null){
System.out.println("输入的数组为空");
return;
}
int i = 0;
int len = arr.length;
max = arr[0];
min = arr[0];
//两两分组,把较小的数挪到左边,较大的数挪到右边
for (i = 0; i <len-1 ; i+=2) {
if (arr[i]>arr[i+1]){
int tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
//最小值放在各个分组的左边
min = arr[0];
for (i = 2; i <len ; i+=2) {
if (arr[i]<min){
min = arr[i];
}
}
//最大值放在各个分组的右边
max = arr[1];
for (i = 3; i < len; i+=2) {
if (arr[i]>max){
max = arr[i];
}
}
//如果数组中元素个数是奇数个,最后一个元素被分为一组,需要特殊处理
if (len%2==1){
if (max<arr[len-1])
max = arr[len-2];
if (min>arr[len-1])
min = arr[len-1];
}
}
public static void main(String[] args) {
int[] arr={500,11,12,100,11,13,1,3,5,205,7,9,2,4,6,8,400,0,300,10};
TestFindArrayNum3 f = new TestFindArrayNum3();
f.FindMaxAndMin(arr);
System.out.println("最大值是"+f.getMax());
System.out.println("最小值是"+f.getMin());
}
}