병합정렬을 사용하여 구조체 배열 정렬

조회수 401회

아래와 같은 문제를 아래 코드로 짜보았는데, 특정 이름이나 학번을 기준으로 정렬을 시키면 그 해당 정보 (이름,학번,과목)이 같이 정렬되는게아니라 ex)이름만 정렬되네요...어떻게해야하나요?ㅠㅠ

-문제-

일반적인 병합정렬 함수를 사용하여 학생들의 정보를 정렬하여 보여주는 프로그램을 작성하 시오. 학생의 정보는 파일에서 읽어서 구조체의 배열에 저장하며, 이름 순서 및 학번 순서대 로 정렬한 결과를 출력한다. 이름과 학과명은 빈 칸 없는 한 단어이며 정렬 시 대소문자를 고려하지 않고 정렬한다. (편의상 파일 내 학생 정보의 개수는 최대 50개로 가정한다.)

======================== 입력 파일 예 : student.txt Kim 88302032 CS Ahn 88302025 Physics jsPark 90302003 Archi Choe 91323303 CS Choi 92323033 Comm Lee 23223232 Elec kim 99303099 Math Park 99333939 Archi Jang 01303009 Math Yi 99303092 CS (실행화면)이름 순 정렬 결과: Ahn 88302025 Physics Choe 91323303 CS Choi 92323033 Comm Jang 01303009 Math jsPark 90302003 Archi Kim 88302032 CS kim 99303099 Math Lee 23223232 Elec Park 99333939 Archi Yi 99303092 CS 학번 순 정렬 결과 Jang 01303009 Math Lee 23223232 Elec Ahn 88302025 Physics Kim 88302032 CS jsPark 90302003 Archi Choe 91323303 CS Choi 92323033 Comm Yi 99303092 CS kim 99303099 Math

Park 99333939 Archi

include

include

include

typedef struct student_ { char name[10][50]; char num[10][50]; char subj[10][50];

}student;

void msort(char a[][50], int low, int high) {

if (low < high)
{
    int mid = (low + high) / 2;
    msort(a, low, mid, 10);
    msort(a, mid + 1, high, 10);
    int i = low, j = mid + 1, k = low;

    char temp[10][50]; 

    while (i <= mid && j <= high)
    {
        if (strcmp(a[i], a[j]) < 0)
        {
            strcpy(temp[k], a[i]);
            k++;
            i++;

        }

        else
        {
            strcpy(temp[k], a[j]);
            k++;
            j++;
        }
    }
    while (i <= mid)
    {
        strcpy(temp[k], a[i]);
        k++;
        i++;
    }
    while (j <= high)
    {
        strcpy(temp[k], a[j]);
        k++;
        j++;
    }
    for (i = low; i <= high; i++)
        strcpy(a[i], temp[i]);
}

}

void main() {

student a;


FILE* fp1 = fopen("student.txt", "r");

for (int i = 0; i < 10; i++) {

    fscanf(fp1, "%s %s %s", a.name[i], a.num[i], a.subj[i]);

}



msort(a.name, 0, 9);


for(int i = 0; i < 10; i++) {

    printf("%s %s %s\n", a.name[i], a.num[i], a.subj[i]);

}


fclose(fp1);

}

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

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

(ಠ_ಠ)
(ಠ‿ಠ)