#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 200
#define RUN 8
typedef struct node{
int data,index;
}node;
int result[MAX_SIZE];
node tree[MAX_SIZE];
int num[MAX_SIZE][RUN];
node compare(node a, node b)
{
if(a.data<=b.data)
return a;
else if(a.data>b.data)
return b;
else if(b.data ==NULL)
return a;
else if(a.data ==NULL)
return b;
}
void input(){
int i,j,k=0;
for(i=0; i<14; i++){
if((i==0) || (i%2==0))
{
for(j=0; j<RUN; j++){
if(k<101){
num[i][j]=k;
k++;
}
else
num[i][j]=999;
}
}
else if(i%2 ==1)
{
for(j=RUN-1; j>=0; j--){
num[i][j]=k;
k++;
}
}
}
printf("RUN 출력\n");
for(i=0; i<13; i++){
for(j=0; j<RUN; j++){
if(num[i][j]<101)
printf("%-4d", num[i][j]);
}
printf("\n");
}
printf("\nRUN 배열 출력\n");
for(j=0; j<RUN; j++){
printf("run%-2d ",j);
for(i=0; i<13; i++){
if(num[i][j]<101)
printf("%-4d", num[i][j]);
}
printf("\n");
}
}
void search(){
int i=1,j=0,k=8;
int i0=0,i1=0,i2=0, i3=0, i4=0, i5=0, i6=0, i7=0;
int arr[7]={0};
while(i<=101){
tree[8].data=num[i0][j];
tree[8].index= j++;
tree[9].data=num[i1][j];
tree[9].index= j++;
tree[10].data=num[i2][j];
tree[10].index= j++;
tree[11].data=num[i3][j];
tree[11].index= j++;
tree[12].data=num[i4][j];
tree[12].index= j++;
tree[13].data=num[i5][j];
tree[13].index= j++;
tree[14].data=num[i6][j];
tree[14].index= j++;
tree[15].data=num[i7][j];
tree[15].index= j++;
j=7;
for(k=7; k>0; k--,j--){
tree[k]=compare(tree[2*k], tree[2*k+1]);
}
result[i++]=tree[1].data;
switch(tree[1].index){
case 0: i0++; break;
case 1: i1++; break;
case 2: i2++; break;
case 3: i3++; break;
case 4: i4++; break;
case 5: i5++; break;
case 6: i6++; break;
case 7: i7++; break;
}
}
printf("\nresult 출력\n");
for(i=1; i<=101; i++)
{
printf("%-4d", result[i]);
}
printf("\n");
}
void main(){
input();
search();
}