创建一个1×1000的一维数组,对数组中的元素进行随机赋值(使用Math.random()生成10-100之间的浮点数)。通过算法找到该数组中最大的5个数,要求从大到小输出这5个数和它们的和。
时间: 2024-09-23 07:01:44 浏览: 46
首先,我们可以创建一个一维数组并初始化它的所有元素为0。然后使用Math.random()函数生成10到100之间的浮点数,遍历整个数组将每个元素替换为随机生成的数。接下来,我们使用一种叫做快速选择(QuickSelect)或堆排序(Heapsort)的算法,找出数组中的前五个最大值,并按照降序存储。最后计算这五个数的总和。
以下是使用Java语言的一个简单示例:
```java
import java.util.Arrays;
import java.util.Random;
public class Main {
public static void main(String[] args) {
int[] array = new int[1000];
Random random = new Random();
// 初始化数组并填充随机数
for (int i = 0; i < array.length; i++) {
array[i] = random.nextInt(100) + 10; // 生成10到100的随机数
}
// 使用快速选择或堆排序找前五大的数
QuickSelect quickSelect = new QuickSelect(array);
int[] largestFive = quickSelect.selectKthLargest(5);
// 输出结果
System.out.println("最大的5个数:");
for (int num : largestFive) {
System.out.print(num + " ");
}
double sum = Arrays.stream(largestFive).sum();
System.out.println("\n它们的和: " + sum);
}
// 快速选择的简化实现
private static class QuickSelect {
private int[] arr;
QuickSelect(int[] arr) {
this.arr = arr.clone(); // 复制原始数组避免修改原数组
}
int[] selectKthLargest(int k) {
return quickSelect(arr, 0, arr.length - 1, k);
}
private int[] quickSelect(int[] arr, int left, int right, int k) {
if (left == right) {
return new int[]{arr[left]};
}
int pivotIndex = partition(arr, left, right);
if (k == pivotIndex) {
return Arrays.copyOfRange(arr, pivotIndex, pivotIndex + 1);
} else if (k < pivotIndex) {
return quickSelect(arr, left, pivotIndex - 1, k);
} else {
return quickSelect(arr, pivotIndex + 1, right, k);
}
}
private int partition(int[] arr, int left, int right) {
int pivot = arr[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (arr[j] >= pivot) {
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, right);
return i + 1;
}
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
```
阅读全文