从键盘键入一些数字,放到数组中,定义S为开始、E为结尾,利用折半法找到并输出最大值和最小值
时间: 2024-03-06 11:51:18 浏览: 23
以下是实现该功能的代码:
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数组长度:");
int n = scanner.nextInt();
int[] arr = new int[n];
System.out.print("请输入" + n + "个数字:");
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
int s = 0, e = n - 1;
int min = arr[0], max = arr[0];
while (s <= e) {
int mid = (s + e) / 2;
if (arr[mid] > max) {
max = arr[mid];
}
if (arr[mid] < min) {
min = arr[mid];
}
if (arr[mid] == max && arr[mid] == min) {
break;
} else if (arr[mid] == max) {
e = mid - 1;
} else if (arr[mid] == min) {
s = mid + 1;
} else {
s = mid + 1;
e = mid - 1;
}
}
System.out.println("最大值为:" + max);
System.out.println("最小值为:" + min);
}
}
```
代码说明:
1. 从键盘输入数组长度和数组元素。
2. 初始化变量 `s` 和 `e` 分别为数组的起始下标和末尾下标。
3. 初始化变量 `min` 和 `max` 分别为数组的第一个元素。
4. 通过折半法找到数组的最大值和最小值。
5. 输出最大值和最小值。
在折半查找的过程中,需要注意以下几点:
1. 在数组中可能有多个最大值或最小值,因此需要判断当前中间值是否等于最大值或最小值。
2. 如果当前中间值等于最大值或最小值,则直接跳出循环。
3. 如果当前中间值等于最大值,则在左侧继续查找。
4. 如果当前中间值等于最小值,则在右侧继续查找。
5. 如果当前中间值既不等于最大值也不等于最小值,则左侧继续查找最小值,右侧继续查找最大值。