#include <stdio.h>
#define SIZE 100
void merge(int initList[], int mergedList[], int i, int m, int n)
{
int j,k,t;
j = m+1;
k=i;
while(i<=m&&j<=n)
{
if(initList[i] <= initList[j])
mergedList[k++] = initList[i++];
else
mergedList[k++] = initList[j++];
}
if(i>m)
for(t=j;t<=n;t++)
mergedList[t] = initList[t];
else
for(t=i;t<=m;t++)
mergedList[k+t-i] = initList[t];
}
void mergePass(int initList[], int mergedList[], int n , int s)
{
int i,j;
for(i = 1; i <=n-2*s+1;i+=2*s)
merge(initList, mergedList, i, i+s-1,i+2*s-1);
if(i+s-1<n)
merge(initList, mergedList, i, i+s-1,n);
else
for(j=i;j<=n;j++)
mergedList[j] = initList[j];
}
void msort(int a[], int n)
{
int s= 1;
int extra[SIZE];
while(s<n)
{
mergePass(a,extra,n,s);
s*= 2;
mergePass(extra,a,n,s);
s*=2;
}
}
void main()
{
int before[] = {0,5,4,3,2,1,0};
int i,k;
k = sizeof(before)/sizeof(int);
msort(before,k-1);
for(i = 0 ; i<k;i++)
printf("%d ",before[i]);
}
'IT' 카테고리의 다른 글
뭔진 잘 모르겠다. (0) | 2014.05.14 |
---|---|
힙소트 // 자세한 설명은 생략한다 (0) | 2014.05.14 |
위너트리하고싶다 . c (0) | 2014.05.14 |
뭔진 모르지만 그냥 정렬 (0) | 2014.05.14 |
뭔진 모르겠지만 무슨 정렬 (0) | 2014.05.14 |