최대 1 분 소요

움.. 그냥 생각나서 다시 짜봤다.. merge sort.. ^^;

간단하다면 간단한데.. 분기 하면서 들어갈때 tmp를 통째로 카피하던 버릇이 있어서 이걸 필요한 만큼만 카피하게 했고..

tmp고 함수 안에서 만들고 했었는데.. 그냥 초기에 한번 선언해서 같이 사용하게 했다 ㅡ.ㅡ;

#include

#include

#include

int * data = NULL;

int * tmp = NULL;

void merge_sort(int l, int r);

int main(int argc, char* argv[])

{

int inputdata[11] ={5,10,1111,22,33,41,16,111,811,91,0};

data = inputdata;

tmp = calloc(1,sizeof(inputdata));

for(int i =0; i< 11; i++)

printf(“%d,”,data[i]);

merge_sort(0, 10);

printf(“\n”);

for(int i =0; i< 11; i++)

printf(“%d,”,data[i]);

free(tmp);

return 0;

}

void merge_sort(int l, int r)

{

if(r<=l) return;

int mid = (l+r)/2;

merge_sort(l, mid);

merge_sort(mid+1, r);

int ll, lr, idx;

ll= idx = l;

lr = mid+1;

memcpy(tmp+l, data+l, sizeof(int)*(r-l+1));

while(ll<= mid && lr <=r)

{

if(tmp[ll]< tmp[lr]) data[idx++]=tmp[ll++];

else data[idx++]= tmp[lr++];

}

while(ll<=mid) data[idx++]=tmp[ll++];

while(lr<=r) data[idx++]= tmp[lr++];

}

\