王鹿其 发表于 2024-1-7 00:16:20

用选择排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序;

四个班的平均成绩保存在四个结构体数组中student students1;student students2;student students3;student students4;但未在班内排序排序,请改写代码并在主函数中实现

template<typename T>
struct Node {
    T data;
    Node* next;
    Node(T value) : data(value), next(nullptr) {}
};
template<typename T>
class LinkedList {
private:
    Node<T>* head;
    Node<T>* tail;

public:
    LinkedList() : head(nullptr), tail(nullptr) {}

    ~LinkedList() {
      while (head != nullptr) {
            Node<T>* temp = head;
            head = head->next;
            delete temp;
      }
    }
    void insert(T value) {
      Node<T>* newNode = new Node<T>(value);
      if (head == nullptr) {
            head = newNode;
            tail = newNode;
      }
      else {
            tail->next = newNode;
            tail = newNode;
      }
    }

    void display() const {
      Node<T>* current = head;
      while (current != nullptr) {
            std::cout << current->data << " -> ";
            current = current->next;
      }
      std::cout << "nullptr" << std::endl;
    }
};
void swap(double &a, double &b)
{
    if (a > b)
    {
      double temp = a;
      a =b;
      b = temp;
    }
}
LinkedList<int> list;
void makelist(student students[])
{
    double arr1[] = { 0 };
    double arr2[] = { 0 };
    double arr3[] = { 0 };
    double arr4[] = { 0 };

    double* begin1 = arr1;
    double* end1 = arr1 + sizeof(arr1) / sizeof(arr1);
    double a = accumulate(begin1, end1, 0);
    double* begin2 = arr2;
    double* end2 = arr2 + sizeof(arr2) / sizeof(arr2);
    double b = accumulate(begin2, end2, 0);
    double* begin3 = arr3;
    double* end3 = arr3 + sizeof(arr3) / sizeof(arr3);
    double c = accumulate(begin3, end3, 0);
    double* begin4 = arr4;
    double* end4 = arr4 + sizeof(arr4) / sizeof(arr4);
    double d = accumulate(begin4, end4, 0);

    swap(a, b);
    swap(b, c);
    swap(c, d);
    swap(a, b);
    swap(b, c);
    list.insert(a);
    list.insert(b);
    list.insert(c);
    list.insert(d);
    list.display();
}

FishC 发表于 2024-1-7 00:16:37

首先,我们需要对每个班级的成绩按照平均成绩的非递增方式进行排序。你可以通过修改选择排序算法来实现这个目标。下面是修改后的代码:

#include <iostream>

struct student {
    std::string name;
    int score;
};

template<typename T>
void selectionSort(T arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
      int maxIndex = i;
      for (int j = i + 1; j < n; j++) {
            if (arr.score > arr.score) {
                maxIndex = j;
            }
      }
      std::swap(arr, arr);
    }
}

int main() {
    const int numStudents = 4;

    // 假设已经初始化了四个班级的成绩
    student students1 = {{"Alice", 88}, {"Bob", 72}, {"Charlie", 95}, {"David", 82}};
    student students2 = {{"Eva", 78}, {"Frank", 69}, {"Grace", 91}, {"Henry", 85}};
    student students3 = {{"Ivy", 94}, {"Jack", 76}, {"Kelly", 81}, {"Leo", 87}};
    student students4 = {{"Mike", 90}, {"Nancy", 83}, {"Olivia", 79}, {"Peter", 92}};

    // 对四个班级的成绩按照平均成绩进行排序
    selectionSort(students1, numStudents);
    selectionSort(students2, numStudents);
    selectionSort(students3, numStudents);
    selectionSort(students4, numStudents);

    // 输出排序后的成绩
    std::cout << "班级1:" << std::endl;
    for (int i = 0; i < numStudents; i++) {
      std::cout << students1.name << ":" << students1.score << std::endl;
    }
    std::cout << "班级2:" << std::endl;
    for (int i = 0; i < numStudents; i++) {
      std::cout << students2.name << ":" << students2.score << std::endl;
    }
    std::cout << "班级3:" << std::endl;
    for (int i = 0; i < numStudents; i++) {
      std::cout << students3.name << ":" << students3.score << std::endl;
    }
    std::cout << "班级4:" << std::endl;
    for (int i = 0; i < numStudents; i++) {
      std::cout << students4.name << ":" << students4.score << std::endl;
    }

    return 0;
}

这段代码通过选择排序算法对每个班级的学生成绩按照平均成绩的非递增方式进行了排序,并输出了排序后的结果。

注意,为了方便起见,我们假设每个班级都有4个学生,并且已经初始化了每个班级的成绩。你可以根据实际情况修改数组的大小和填充成绩数据。另外,你可能需要在代码中添加其他字段或修改结构体的定义来存储学生的其他信息。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 用选择排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序;