编写java应用程序将数组中的数据进行排序,然后使用折半法判断用户输入的一个整数是否在数组中(数组中的数组要求从键盘录入)。
时间: 2024-09-23 15:13:50 浏览: 54
利用数组进行数据查找--折半查找法介绍-c语言编程——计算机专业的教材
在Java中,你可以按照以下步骤编写程序来实现这个功能:
1. 首先,创建一个`Scanner`对象,用于从键盘读取用户输入。
```java
import java.util.Scanner;
public class Main {
//...
}
```
2. 接下来,创建一个方法`readArray(int size)`来获取用户输入的整数并填充到数组中。
```java
private static int[] readArray(int size) {
Scanner scanner = new Scanner(System.in);
int[] array = new int[size];
for (int i = 0; i < size; i++) {
System.out.print("请输入第 " + (i+1) + " 个元素:");
array[i] = scanner.nextInt();
}
scanner.close(); // 关闭扫描器
return array;
}
```
3. 创建一个方法`sortArray(int[] array)`对数组进行排序。这里我们可以使用Java内置的`Arrays.sort()`方法,因为它是稳定的并且适用于整个数组。
```java
private static void sortArray(int[] array) {
Arrays.sort(array);
}
```
4. 实现折半查找算法(Binary Search),该算法需要数组已排序。如果用户要查找的值位于数组中,此算法的时间复杂度为O(log n),否则返回-1表示未找到。
```java
private static int binarySearch(int[] sortedArray, int target) {
int left = 0;
int right = sortedArray.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (sortedArray[mid] == target) {
return mid;
} else if (sortedArray[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
5. 在主函数`main()`中,调用上述所有方法,并根据用户的输入检查数字是否在数组中。
```java
public static void main(String[] args) {
int size = 10; // 或者让用户输入数组大小
int[] inputArray = readArray(size);
sortArray(inputArray);
System.out.println("数组已排序:");
for (int num : inputArray) {
System.out.print(num + " ");
}
int searchNumber = scanner.nextInt(); // 用户输入的整数
int resultIndex = binarySearch(inputArray, searchNumber);
if (resultIndex != -1) {
System.out.println("\n" + searchNumber + " 存在于数组中,位置:" + (resultIndex + 1));
} else {
System.out.println("\n" + searchNumber + " 不在数组中.");
}
}
```
阅读全文