메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 C 프로그래밍

뇌를 자극하는 C 프로그래밍 질의응답 게시판입니다.

용기를 가지고 감히 물어봅니다.

2008-04-06

|

by 유은상

2021

알고리즘에서 합병정렬을 배웠는데요..

무턱대고 씨로 잡고 달려들었는데.. 이상하게 안풀려요..

오류를 이해를 못하겠어요...

좀..알려주세요..ㅠ_ㅠ

//***************************************************************************************//
//재귀를 이용하여 푸는 겁니다..



#include
#include
//합병정렬
void mergesort(int s[] , int n);//분할 할려는 배열과, 원소의 개수
void merge(int h, int m, const int U[], int V[], int S[]);


#define SIZE 8  //배열의 크기입니다.


int main (){
        
        int orignal[SIZE] = { 27 , 10 , 12, 20, 25, 13, 15, 22};
        
        //합병정렬
        mergesort(orignal, SIZE);


        for(int i=0; i                 printf("%d \n" , i);
        return 0;
}

void mergesort(int S[] , int n){
        if(n>1){
                const int h=n/2, m=n-h;
            int*U = (int*)malloc(sizeof(h));
                 int*V = (int*)malloc(sizeof(m));
                //int U[h];
                //int V[m];
                for(int i=0 ; i                         U[i] = S[i];
                for(i=h+1 ; i                         V[i] = S[i];
                mergesort(U , h);
                mergesort(V , m);
                merge(h, m , U, V, S);
        }
}

void merge(int h, int m ,  int U[],  int V[], int S[]){
        int i, j, k; // these are for index
        i=0; j=0; k=0;
        //둘중 하나라도 끝나면 루프는 종료
           while(i                 if(U[i]                 {
                        S[k] = U[i];
                        i++;
                }
                else{
                        S[k] = V[j];
                        j++;
                }
        k++;
        }
          //i 가 먼저 끝났다면 V에있는 나머지 원소를 같다가 붙여줍니다.
        if(i>h){
                for(int restj=j ; restj                         S[k] = V[restj];
                        k++;
                }
        }
        else{
                for(int resti=i ; resti < h ; resti++){
                        S[k] = U[resti];
                        k++;
                }
        }
}
댓글 입력
자료실