有一组学生的成绩是{99,85,82,63, 60},将它们按降序排列。现需要增加一个学生的成绩,将它插入数组,并保持成绩降序排列,用Java写
时间: 2024-10-08 20:23:00 浏览: 35
首先,我们可以使用Java的Collections.sort()方法配合自定义比较器(Comparator)来对成绩数组进行降序排序。然后,添加新成绩时,我们可以在遍历排序后的数组找到插入位置。以下是一个简单的Java代码示例:
```java
import java.util.Arrays;
import java.util.Collections;
class StudentScore {
int score;
// 构造函数、equals等省略...
}
public class Main {
public static void main(String[] args) {
StudentScore[] scores = {new StudentScore(99), new StudentScore(85), new StudentScore(82),
new StudentScore(63), new StudentScore(60)};
// 对成绩数组进行降序排序
Arrays.sort(scores, Collections.reverseOrder());
// 新增学生分数
StudentScore newStudent = new StudentScore(97); // 示例分数
// 找到插入位置
int insertionIndex = binarySearch(scores, newStudent.score, true);
// 插入新学生分数
System.arraycopy(scores, insertionIndex, scores, insertionIndex + 1, scores.length - insertionIndex);
scores[insertionIndex] = newStudent; // 将新学生插入相应位置
// 输出排序后的数组
for (StudentScore student : scores) {
System.out.println(student.score);
}
}
// 二分查找插入点,true表示升序查找
private static int binarySearch(StudentScore[] array, int target, boolean ascending) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if ((ascending && array[mid].score >= target)
|| (!ascending && array[mid].score <= target)) {
return mid;
} else if (ascending && array[mid].score > target) {
high = mid - 1;
} else {
low = mid + 1;
}
}
// 如果新值应该放在开头
if (ascending && target > array[high].score) {
return 0;
} else {
return high + 1;
}
}
}
阅读全文