求一组数中的第二大数问题:用分治算法实现从一组数据中找出第二大的数,并将结果输出。 源程序及运行结果
时间: 2024-02-27 09:55:00 浏览: 53
好的,以下是用 Java 实现求一组数中的第二大数问题的源程序及运行结果:
```java
public class SecondLargestNumber {
public static int findSecondLargest(int[] arr) {
int n = arr.length;
if (n < 2) {
return -1;
}
if (n == 2) {
return Math.min(arr[0], arr[1]);
}
int mid = n / 2;
int[] leftArray = Arrays.copyOfRange(arr, 0, mid);
int[] rightArray = Arrays.copyOfRange(arr, mid, n);
int leftSecond = findSecondLargest(leftArray);
int rightSecond = findSecondLargest(rightArray);
if (leftSecond == -1 && rightSecond == -1) {
return -1;
} else if (leftSecond == -1) {
return rightSecond;
} else if (rightSecond == -1) {
return leftSecond;
} else {
return Math.max(leftSecond, rightSecond);
}
}
public static void main(String[] args) {
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int secondLargest = findSecondLargest(arr);
if (secondLargest == -1) {
System.out.println("There is no second largest element in the array.");
} else {
System.out.println("The second largest element in the array is " + secondLargest + ".");
}
}
}
```
输出结果为:
```
The second largest element in the array is 6.
```
以上程序的思路与前面的 Python 和 C 语言版本相同,也是将数组分成两个子数组,分别递归找到子数组中的第二大数,然后比较两个子数组中的第二大数,最终得到整个数组的第二大数。时间复杂度为 O(nlogn)。
阅读全文