인설션소트
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<limits.h>
#define MAX 100
typedef struct node{
int data,index;
}node;
node tree[8];
node result[MAX];
void print(int a[])
{
int i;
for(i=1; i<26; i++)
{
printf("%d\t", a[i]);
}
printf("\n\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,temp;
for(j=2; j<=n; j++){
temp= a[j];
insert(temp, a, j-1);
}
}
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 search(int a1[], int a2[], int a3[] , int a4[]){
int i=0,j;
int index1=1, index2=1, index3=1, index4=1;
while(i<101)
{
if(index1>25)
a1[index1]=INT_MAX;
tree[4].data=a1[index1];
tree[4].index=1;
if(index2>25)
a2[index2]=INT_MAX;
tree[5].data=a2[index2];
tree[5].index=2;
if(index3>25)
a3[index3]=INT_MAX;
tree[6].data=a3[index3];
tree[6].index=3;
if(index4>25)
a4[index4]=INT_MAX;
tree[7].data=a4[index4];
tree[7].index=4;
for(j=3; j>0; j--){
tree[j]=compare(tree[2*j], tree[2*j+1]);
}
result[i++]=tree[1];
switch(tree[1].index){
case 1: index1++; break;
case 2: index2++; break;
case 3: index3++; break;
case 4: index4++; break;
}
}
for(i=0; i<100; i++)
{
printf("%d,%d\t", result[i].data, result[i].index);
}
}
void main()
{
int a1[MAX], a2[MAX], a3[MAX], a4[MAX];
int i;
srand(time(NULL));
for(i=1; i<26; i++)
{
a1[i] =rand()%10000;
a2[i] =rand()%10000;
a3[i] =rand()%10000;
a4[i] =rand()%10000;
}
print(a1);
print(a2);
print(a3);
print(a4);
printf("\n");
printf("정렬후 출력\n");
insertionSort(a1, 25);
print(a1);
insertionSort(a2, 25);
print(a2);
insertionSort(a3, 25);
print(a3);
insertionSort(a4, 25);
print(a4);
search(a1,a2,a3,a4);
}