병합정렬 질문 드립니다

조회수 644회
void Merge_name(Student *s, int p, int q, int r, int tag) {
    int i = 0, j = 0, k = 0;//반복문용
    int n1 = q - p + 1;
    int n2 = r - q;
    Student *L = (Student*)malloc(sizeof(Student) * n1 + 1);
    Student *R = (Student*)malloc(sizeof(Student) * n2 + 1);

    for (i = 0; i < n1; i++)
        L[i] = s[p + i];
    for (j = 0; j < n2; j++)
        R[j] = s[q + j + 1];
    i = 0, j = 0;

    if (tag == 0) {
        L[n1].name[0] = CHAR_MAX;
        R[n2].name[0] = CHAR_MAX;
        for (k = p; k <= r; k++) {
            if (strcmp(L[i].name, R[j].name) <= 0) {
                s[k] = L[i++];
            }
            else {
                s[k] = R[j++];
            }
        }
    }
    else if (tag == 1) {
        L[n1].name[0] = CHAR_MIN;
        R[n2].name[0] = CHAR_MIN;
        for (k = p; k <= r; k++) {
            if (strcmp(L[i].name, R[j].name) >= 0) {
                s[k] = L[i++];
            }
            else {
                s[k] = R[j++];
            }
        }
    }
}
void MergeSort(Student *s, int p, int r, int tag1, int tag2) {
    int q;
    if (p<r) {
        q = (p + r) / 2;
        if (tag1 == 0) {//tag1 : 이름순, tag2 : 오름내림
            MergeSort(s, p, q, tag1, tag2);
            MergeSort(s, q + 1, r, tag1, tag2);
            Merge_name(s, p, q, r, tag2);
        }
}

이런식으로 병합정렬을 작성하였는데 아무래도 CHAR_MIN, CHAR_MAX를 넣는 부분에서 문제가 계속 생기는 것 같은데 방법이 없을까요? 메인에서 호출은 MergeSort(s, 0, num - 1, tag1, tag2); 이렇게 하였습니다. 숫자정렬은 잘 되는데 문자정렬이 문제네요ㅠㅠ

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

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

(ಠ_ಠ)
(ಠ‿ಠ)