package agrisom;
/**
* 分治法求数列最大值
*/
public class FindMax {
public int devideAndConquer(int array[]) {
int length = array.length;
int first;
int second;
if (length == 1) {
return array[0];
} else if (length == 2) {
return Math.max(array[0], array[1]);
} else if (length < 1) {
return 0;
} else {
first = length / 2;
second = length - length / 2;
int firstArray[] = new int[first];
int secondArray[] = new int[second];
for (int i = 0; i < first; i++) {
firstArray[i] = array[i];
}
for (int j = first; j < length; j++) {
secondArray[j - first] = array[j];
}
return Math.max(devideAndConquer(firstArray), devideAndConquer(secondArray));
}
}
public static void main(String[] args) {
FindMax findMax = new FindMax();
int array[] = { 5, 12, 1, 36, 9, 2, 14, 30, 21, 56, 80, 12, 33 };
long beginTime = System.nanoTime();
int max = findMax.devideAndConquer(array);
long endTime = System.nanoTime();
System.out.println("最大值:" + max);
System.out.println("耗时: " + (endTime - beginTime) + " ns");
}
}
/**
* 分治法求数列最大值
*/
public class FindMax {
public int devideAndConquer(int array[]) {
int length = array.length;
int first;
int second;
if (length == 1) {
return array[0];
} else if (length == 2) {
return Math.max(array[0], array[1]);
} else if (length < 1) {
return 0;
} else {
first = length / 2;
second = length - length / 2;
int firstArray[] = new int[first];
int secondArray[] = new int[second];
for (int i = 0; i < first; i++) {
firstArray[i] = array[i];
}
for (int j = first; j < length; j++) {
secondArray[j - first] = array[j];
}
return Math.max(devideAndConquer(firstArray), devideAndConquer(secondArray));
}
}
public static void main(String[] args) {
FindMax findMax = new FindMax();
int array[] = { 5, 12, 1, 36, 9, 2, 14, 30, 21, 56, 80, 12, 33 };
long beginTime = System.nanoTime();
int max = findMax.devideAndConquer(array);
long endTime = System.nanoTime();
System.out.println("最大值:" + max);
System.out.println("耗时: " + (endTime - beginTime) + " ns");
}
}