병합정렬 질문 드립니다
조회수 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); 이렇게 하였습니다.
숫자정렬은 잘 되는데 문자정렬이 문제네요ㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력