用选择法对 15 个学生的成绩按从大到小的顺序排序,15 个学生的成绩整数用cin 输入,如果输入的成绩不在[0,100]之间,则提示“输入错误”。排序完成后,输入一个成绩,要求用折半查找法找出该成绩是该组中第几个元素的值(即第几名)。如果该成绩不在数组中,则输出“无此成绩”。 要求: 1、把排序算法写成函数形式,在主函数中输入15 个数据,然后调用排序函数排序。 2、在排序过程中尽量减少数据的交换和移动。 3、把查找算法写成函数形式,在主函数中输入1 个数据,然后调用查找函数排序。
时间: 2023-05-10 17:55:29 浏览: 148
好的,让我来回答你的问题。
以下是用选择法对 15 个学生的成绩按从大到小的顺序排序的代码:
```cpp
#include <iostream>
using namespace std;
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(arr[i], arr[minIndex]);
}
}
}
int binarySearch(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid + 1;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int scores[15];
for (int i = 0; i < 15; i++) {
cin >> scores[i];
if (scores[i] < 0 || scores[i] > 100) {
cout << "输入错误" << endl;
return 0;
}
}
selectionSort(scores, 15);
int target;
cin >> target;
int rank = binarySearch(scores, 15, target);
if (rank == -1) {
cout << "无此成绩" << endl;
} else {
cout << "该成绩是该组中第" << rank << "个元素的值(即第" << rank << "名)" << endl;
}
return 0;
}
```
如果你有任何问题,可以随时问我。
阅读全文