본문 바로가기

IT

뭔진 모르겠지만 무슨 정렬

#include <stdio.h>

#include <stdlib.h>

#include <time.h>


#define MAX 30

#define M 9999

typedef struct tree{

int index;

int key;

}tree;


int result[100];

int runindex[100];

int index[4] ;

int n=0;


void winner(int a1[],int a2[], int a3[], int a4[])

{

tree tree[8];

int i=0;

for(i=0 ; i<4 ; i++)

index[i]++;

while(1)

{

for(i=4 ; i<5 ; i++)

{

if(index[i-4] > 25)

a1[index[i-4]] = M;

tree[i].key = a1[index[i-4]];

tree[i].index = i-3;

}

for(i=5 ; i<6 ; i++)

{

if(index[i-4] > 25)

a2[index[i-4]] = M;

tree[i].key = a2[index[i-4]];

tree[i].index = i-3;

}

for(i=6 ; i<7 ; i++)

{

if(index[i-4] > 25)

a3[index[i-4]] = M;

tree[i].key = a3[index[i-4]];

tree[i].index = i-3;

}

for(i=7 ; i<8 ; i++)

{

if(index[i-4] > 25)

a4[index[i-4]] = M;

tree[i].key = a4[index[i-4]];

tree[i].index = i-3;

}


for(i=7 ; i!=1 ; i-=2)

{

if(tree[i].key > tree[i-1].key)

{

tree[i/2].key = tree[i-1].key;

tree[i/2].index = tree[i-1].index;

}

else

{

tree[i/2].key = tree[i].key;

tree[i/2].index = tree[i].index;

}

}

if(tree[i].key == M)

break;

result[n] = tree[i].key;

runindex[n++] = tree[i].index;

switch(tree[i].index)

{

case 1 : index[0]++; break;

case 2 : index[1]++; break;

case 3 : index[2]++; break;

case 4 : index[3]++; break;

}

}

printf("\n");

printf("Result : \n");

for(i=1; i<=n ; i++)

{

printf("(%2d,%2d) ", result[i-1],runindex[i-1]);

if(i%10 == 0 )

printf("\n");

}

}

void print(int a[])

{

int i;

for(i=1 ; i<26; i++)

{

printf("%2d ", a[i]);

}

printf("\n");

}

void insert(int e, int a[], int i)

{

a[0] = e;

while(e < a[i])

{

a[i+1] = a[i];

i--;

}

a[i+1] = e;

}

void insertionsort(int a[], int n)

{

int j;

for(j=2 ; j<=n ; j++)

{

int temp = a[j] ;

insert(temp,a,j-1);

}

}


void main()

{

int a1[MAX], a2[MAX], a3[MAX], a4[MAX];


int i;


srand((unsigned) time(NULL));

for(i=1 ; i< 26 ; i++)

{

a1[i] = rand()%100;

a2[i] = rand()%100;

a3[i] = rand()%100;

a4[i] = rand()%100;

}

print(a1);

printf("\n");

print(a2);

printf("\n");

print(a3);

printf("\n");

print(a4);

printf("\n");


insertionsort(a1,25);

insertionsort(a2,25);

insertionsort(a3,25);

insertionsort(a4,25);

printf("정렬 후 배열 모습\n");

print(a1);

printf("\n");

print(a2);

printf("\n");

print(a3);

printf("\n");

print(a4);

printf("\n");

printf("winner tree\n");

winner(a1,a2,a3,a4);

printf("\n");

}