본문 바로가기

IT

위너트리하고싶다 . c

#include <stdio.h>

#include <time.h>

#include <stdlib.h>


#define default 1000

#define root 1


typedef struct element

{

int key;

int run;

}element;


element *tree, list[4][26];


int treeSize = 4, listSize[4], treeNodeNum= treeSize << 1, listCounter[4], size = 26;


void createSelectionTree()

{

int i, j,k=0;


tree = (element*)malloc(sizeof(element)*(treeNodeNum));



srand((unsigned int) time (NULL));

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

{

for (j = 0; j < treeSize; j++)

{

list[j][i].key = rand()%10;

list[j][i].run = j;

}

listCounter[i] = 0;

}

}


void push()

{

int i;


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

{

tree[treeSize + i].key = list[i][listCounter[i]].key;

}

}


element pop()

{

int parent = root, child = parent * 2;


while (child < treeNodeNum)

{

if (tree[parent].key == tree[child].key)

{

parent = child;

child = parent * 2;

}

else

{

parent = child + 1;

child = parent * 2;

}

}

listCounter[parent - treeSize]++;

return tree[root];

}


void adjustTree()

{

int child, parent;


for (parent = treeSize - 1; parent > 0; parent--)

{

child = parent * 2;


if (tree[child].key > tree[child + 1].key)

tree[parent].key = tree[child + 1].key;

else

tree[parent].key = tree[child].key;

}

}


void insert(element a, element arr[], int i)

{

arr[0] = a;

while(a.key < arr[i].key)

{

arr[i+1] = arr[i];

i--;

}

arr[i+1] = a;

}


void isort(element arr[], int n)

{

int j;

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

{

element temp = arr[j];

insert(temp, arr, j-1);

}

}



void main()

{

element temp;

int i = 0, j = 0,count=0;


temp.key = 0;

printf("배열 1-4\n");


createSelectionTree();



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

{

printf("배열 %d : ", i+1);

for (j = 1; j < size; j++)

{

printf("%d ", list[i][j].key);

}

printf("\n");

}


printf("\n정렬 후...\n");

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

{


isort(list[i],size-1);


}

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

{

printf("배열 %d : ", i+1);

for (j = 1; j < size; j++)

{

printf("%d ", list[i][j].key);

}

printf("\n");

}



printf("위너트리하고싶다......\n");

do

{

push();

adjustTree();

temp = pop();

printf("%d ", temp.key);

printf("%d ", temp.run);

printf("\n");

count++;

} while (count != 4*26);

printf("\n");

}

'IT' 카테고리의 다른 글

힙소트 // 자세한 설명은 생략한다  (0) 2014.05.14
머지 소트  (0) 2014.05.14
뭔진 모르지만 그냥 정렬  (0) 2014.05.14
뭔진 모르겠지만 무슨 정렬  (0) 2014.05.14
HASH 3 // HASH 1이랑 뭐가 다른지 잘 모르겠음  (0) 2014.05.14