본문 바로가기
프로그래머의 길/알고리즘

합병 정렬(Merge Sort) 구현

by 하늘아래. 2007. 4. 2.
반응형

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void merge(int, int, int *, int *, int *);
void mergesort(int n, int *);
void multiplication();

void mergesort(int n, int *S)
{
    int h = n/2;
    int m = n-h;
    int *U = (int *)malloc(h*sizeof(int));
    int *V = (int *)malloc(m*sizeof(int));        

    if(n>1)
    {
             int i;
             for(i=0; i<h; i++)
                      U[i] = S[i];
             for(i=0; i<m; i++)
                      V[i] = S[h+i];

             mergesort(h, U);
             mergesort(m, V);
             merge(h,m,U,V,S);
     }
}

void merge(int h, int m, int *U, int *V, int *S)
{
        int i,j,k;
        i=j=k=0;

        while(i<h && j<m)
         {
                if(U[i]<V[j])
                  {
                        S[k] = U[i];
                        i++;
                   }
                  else
                  {
                            S[k] = V[j];
                           j++;
                   }
                   k++;
           }
         if(i>=h)
          {
                while(j<m)
                        S[k++] = V[j++];
          }

          else
           {
                while(i<h)
                        S[k++] = U[i++];
           }
}

void multiplication()
//표준 알고리즘을 이용하여 행렬을 계산한다
{
  double start, stop, timer;
  start = clock();
//역시 시간을 계산하기위해 start에 현재 시간을 넣고
     
        stop = clock();
  timer = ((double)(stop-start)) / CLK_TCK ;
  printf("\n");
  printf("\n실행시간은 : %d\n",timer);
//걸린 시간을 출력한다
}

int main()
{
        int A[]={16,12,5,38,19,4,20,27,4,6,8,12,13,44,54,23,4,45,45,45,23,5,6,56,6,8};
        int i,n;

        n = sizeof(A)/sizeof(int);
        printf("\n<< Before merge-sorting >>\n");
        for(i=0; i<n; i++)
                printf("%d  ", A[i]);
        mergesort(n, A);
        printf("\n");

        printf("\n<< After merge-sorting >>\n");
        for(i=0; i<n; i++)
                printf("%d  ", A[i]);

         multiplication();
         printf("\n");
         system("pause");    
}

반응형