편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.11.08

    병합정렬 질문 드립니다


    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); 이렇게 하였습니다. 숫자정렬은 잘 되는데 문자정렬이 문제네요ㅠㅠ

  • 프로필 유동욱님의 편집
    날짜2018.10.14

    병합정렬 질문 드립니다


    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); 이렇게 하였습니다. 숫자정렬은 잘 되는데 문자정렬이 문제네요ㅠㅠ

  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.10.09

    병합정렬 질문 드립니다


    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); 이렇게 하였습니다. 숫자정렬은 잘 되는데 문자정렬이 문제네요ㅠㅠ