merge sort using two params.
인자 두개를 소팅 하는 방법을 구현해 보았습니다.
a인자를 먼저 쏘팅하고 a인자가 같으면 b인자를 기준으로 했습니다.
#include
#include
typedef struct MY_DB{
int a;
int b;
}MY_DB;
MY_DB sorting_test[10000];
MY_DB sorting_buff[10000];
int sorting_count = 0;
void insert_db(int a, int b)
{
sorting_test[sorting_count].a = a;
sorting_test[sorting_count++].b = b;
}
void merge_sort(int l, int r)
{
int i = 0;
if(r - l <=0)
return;
int idx, mid, ll, lr;
mid = (l+r)/2;
merge_sort(l, mid);
merge_sort(mid+1, r);
idx = ll = l;
lr = mid+1;
for(i = l; i <=r; i++)
{
sorting_buff[i] = sorting_test[i];
}
while(ll <= mid && lr<=r)
{
if(sorting_buff[ll].a<sorting_buff[lr].a)
{
sorting_test[idx++] = sorting_buff[ll++];
}
else if(sorting_buff[ll].a>sorting_buff[lr].a)
{
sorting_test[idx++] = sorting_buff[lr++];
}else // a 같을 경우
{
if(sorting_buff[ll].b<=sorting_buff[lr].b)
{
sorting_test[idx++] = sorting_buff[ll++];
}
else if(sorting_buff[ll].b>sorting_buff[lr].b)
{
sorting_test[idx++] = sorting_buff[lr++];
}
}
}
while(ll<=mid)
{
sorting_test[idx++] = sorting_buff[ll++];
}
while(lr<=r)
{
sorting_test[idx++] = sorting_buff[lr++];
}
}
int main(int argc, char *argv[])
{
int i = 0;
memset(sorting_test, 0, sizeof(sorting_test));
memset(sorting_buff, 0, sizeof(sorting_buff));
insert_db(1,5);
insert_db(1,2);
insert_db(1,3);
insert_db(2,7);
insert_db(3,3);
insert_db(2,3);
insert_db(1,1);
insert_db(2,1);
insert_db(5,11);
printf(“before original \n”);
for( i = 0; i<sorting_count; i++ )
printf(“[%d],(a,b)= (%d, %d)\n”, i, sorting_test[i].a, sorting_test[i].b);
merge_sort(0, sorting_count-1);
printf(“—-after sorting—-\n”);
for( i = 0; i<sorting_count; i++ )
printf(“[%d],(a,b)= (%d, %d)\n”, i, sorting_test[i].a, sorting_test[i].b);
}