JAVA数组的最大最小值二分法查找

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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;
}
}

相关文档
最新文档