클래스 배열 정렬하기 질문입니다. 도와주세요

조회수 1175회

제가 지금 클래스 배열을 사용해서 힙정렬을 하려고하고있는데요 클래스에서 score을 정렬해서 전체를 정렬해주려고해서 data배열을 만들어서 score만 따로 정렬하는데는 성공했지만, 이를 가지고 전체 student 배열을 정렬해주는법을 모르겠습니다 ...
어떻게 해야할까요? 그리고 이름순으로도 정렬을 하려면 어떻게 해야할까요?

혹시 더 좋은 방법이 있다면 알려주세요! 부탁드립니다. 현재 정렬은 main함수에서 밑부분에서 진행하고있었습니다 아래는 코드입니다.

#include <iostream>
#include <fstream>

using namespace std;

class Student {
private:
    char *name;
    int stdID;
    int score;
public:
    Student(char* _name, int _stdID, int _score) {
        int len = strlen(_name) + 1;
        name = new char[len];
        strcpy_s(name, len, _name);
        stdID = _stdID;
        score = _score;
    }
    Student() {
        name = NULL;
        stdID = 0;
        score = 0;
    }
    void setStudentInfo(char* _name, int _stdID, int _score) {
        name = _name;
        stdID = _stdID;
        score = _score;
    }

    void getInfo() {
        cout << "이름: " << name << " ";
        cout << "학번: " << stdID << " ";
        cout << "점수: " << score << " " << endl;
    }
    int getData() {
        return score;
    }
    ~Student() {
        delete[] name;
    }
};

void heapify(int data[], int size, int i);
void heapsort(int data[], int size);


void main() {
    Student *student[10]; //학생정보 객체 최대 10개까지
    char name[10]; //이름
    int ID, score; //학번,학점
    int num; //학생의 수
    int data[10]; // 힙정렬을 위한 점수를 담는 배열

    cout << "학생수를 입력하세요 :"; //학생수 입력
    cin >> num;

    for (int i = 0; i < num; i++) { //학생정보 입력
        cout << "학생의 이름, 학번, 학점순으로 입력하세요 : ";
        cin >> name >> ID >> score;
        student[i] = new Student(name, ID, score);
    }
    for (int i = 0; i < num; i++) {
        student[i]->getInfo(); //입력된 학생정보 출력
        data[i] = student[i]->getData(); //data 배열에 학생점수 넣기
    }
 // ************************************************
    heapsort(data, num); //점수만 힙정렬
    for (int i = 0; i < num; i++) {
        cout << data[i] << " ";
    }

    cout << endl;

   // ************************************************
   //이부분에 정렬을 해주려고햇습니다.



    for (int i = 0; i < num; i++) {
        delete student[i];
    }

}

void heapify(int data[], int size, int i) {
    int largest = i;
    int left = 2 * i + 1;
    int right = 2 * i + 2;

    if (left< size && data[left] > data[largest])
        largest = left;

    if (right < size && data[right] > data[largest])
        largest = right;

    if (largest == i)
        return;

    std::swap(data[i], data[largest]);

    heapify(data, size, largest);
}

void heapsort(int data[], int size) {
    for (int i = size / 2 - 1; i >= 0; i--)
        heapify(data, size, i);
    for (int i = size - 1; i >= 0; i--) {
        std::swap(data[0], data[i]);
        heapify(data, i, 0);
    }
}

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)