find min and max -- 1.5n times for comparison

来源:互联网 发布:广联达软件有哪些 编辑:程序博客网 时间:2024/04/30 09:30

1. divide and conquer

public static int[] findMinMax(int[] array, int[] res, int start , int end){int[] minmax = new int[2];if(end - start <= 1){if(array[start] < array[end]){minmax[0] = array[start] ;minmax[1] = array[end] ;}else {minmax[1] = array[start] ;minmax[0] = array[end] ;}return minmax;}int mid = (start + end )/2;int[] leftminmax = findMinMax(array, res, start, mid);int[] rightminmax = findMinMax(array, res, mid+1, end);if(leftminmax[0] < rightminmax[0]){minmax[0] = leftminmax[0];}else {minmax[0] = rightminmax[0];}if(leftminmax[1] > rightminmax[1]){minmax[1] = leftminmax[1];}else {minmax[1] = rightminmax[1];}return minmax;}

2. adjacent comparison

public static void findMinMax(int[] array){int[] minmax = new int[2];minmax[0] =  array[array.length-1];minmax[1] =  array[array.length-1];int min = Integer.MAX_VALUE;int max = Integer.MIN_VALUE;for(int i =0; i<array.length/2*2; i=i+2){if(array[i] > array[i+1]){min = array[i+1];max = array[i];}else{min = array[i];max = array[i+1];}if(min < minmax[0] )minmax[0] = min;if(max >  minmax[1] )minmax[1] = max;}}


0 0