JAVA数组的最大最小值二分法查找
import java.util.Arrays;
public class ArrayMaxMinSelect {
public static void main(String[] args) {
int[] arr = { -59, -25, -69, 0, 180, 98, 125 };
int max1 = getMax_1(arr);
System.out.println("Í??×,Æ?ê?È,Ï,î?óÖµ:" + max1);
int max2 = getMax_2(arr);
System.out.println("Í??×Ê×,éÖ?µÄÒªËØ,ø???È,Ï:" + max2);
Arrays.sort(arr);
int index = halfSeach_2(arr, 98);
System.out.println("Òª?éÕÒµÄÖµµÄÏÂ?êÊÇ?º" + index);
}
/**
* ×î?óÖµ?éÕÒ1
*
* @param array
* @return
*/
public static int getMax_1(int[] array) {
int maxIndex = 0; // Í??×,Æ?ê?È,Ï,î?óÖµ
for (int i = 1; i < array.length; i++) {
if (array[i] > array[maxIndex]) {
maxIndex = i;
}
}
return array[maxIndex];
}
/**
* ×î?óÖµ?éÕÒ2
*
* @param array
* @return
*/
public static int getMax_2(int[] array) {
int maxElement = array[0]; // Í??×Ê×,éÖ?µÄÒªËØ,ø???È,Ï
for (int i = 0; i < array.length; i++) {
if (array[i] > maxElement) {
maxElement = array[i];
}
}
return maxElement;
}
/**
* ???Ö?éÕÓ????Õ,?ë?éÕÓ????Æ?ÐáÊÆ?Ø?ëÊÆÅźÃ?òµÄÊ×,é µÔÓ?ÖÖ?,??
*
* @param array
* @return
*/
public static int halfSeach_1(int[] arr, int key) {
int min = 0; // ,î??,Æ?ê
int max = arr.length - 1;// ×î?ó?Ç?ê
int mid = (min + max) / 2; // Ö?,ä,Æ?ê
while (key != arr[mid]) {
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
}
if (max < min) {
return -1;
}
mid = (min + max) / 2; // Ã?Ñ???Ó??Î?,Óª???Ö
}
return mid;
}
/**
* ???Ö?éÕÓ????Õ,?ë?éÕÓ????Æ?ÐáÊÆ?Ø?ëÊÆÅźÃ?òµÄÊ×,é µÔ??ÖÖ?,??
*
* @param array
* @return
*/
public static int halfSeach_2(int[] arr, int key) {
int min = 0; // ,î??,Æ?ê
int max = arr.length - 1;// ×î?ó?Ç?ê
int mid = (min + max) / 2; // Ö?,ä,Æ?ê
while (min <= max) {
mid = (max + min) >> 1; // >>?ú?ì,ÓÓ,Ó?Î?Ïàµ?,Ô?×ÓÒ2Ë,?È?í
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
} else {
return mid;
}
}
return -1;
}
}