#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");
}
'프로그래머의 길 > 알고리즘' 카테고리의 다른 글
쉘 정렬(Shell sort) (0) | 2007.04.03 |
---|---|
삽입 정렬(Insertion Sort) (0) | 2007.04.03 |
합병 정렬(Merge Sort) (0) | 2007.04.02 |
버블 정렬 구현 (0) | 2007.04.02 |
버블 정렬(Bubble Sort) (0) | 2007.04.02 |