Pagini recente » Sandbox (cutiuţa cu năsip) | Cod sursa (job #2066376) | Cod sursa (job #82644) | Cod sursa (job #1697010) | Cod sursa (job #1670780)
#include<stdio.h>
FILE *in, *out;
struct node
{
int data;
struct node *l, *r;
};
typedef struct node Node;
Node *root=NULL;
int sorted_vector[500010], sorted_vect_size, N;
void initialise_heap(Node **root, int data)
{
*root = (Node*)malloc(sizeof(Node));
(*root)->data = data;
(*root)->l = NULL;
(*root)->r = NULL;
}
void add_to_heap(Node *root, int data)
{
if (data < root->data)
{
if (root->l == NULL)
{
Node *temp_node = (Node*)malloc(sizeof(Node));
temp_node->data = data;
temp_node->l = 0;
temp_node->r = 0;
root->l = temp_node;
}
else
add_to_heap(root->l, data);
}
else
{
if (root->r == NULL)
{
Node *temp_node = (Node*)malloc(sizeof(Node));
temp_node->data = data;
temp_node->l = 0;
temp_node->r = 0;
root->r = temp_node;
}
else
add_to_heap(root->r, data);
}
}
void heap_sort(Node *root, int *vec)
{
if (root->l != 0)
heap_sort(root->l, vec);
++sorted_vect_size;
vec[sorted_vect_size] = root->data;
if (root->r != 0)
heap_sort(root->r, vec);
}
void initialise_files()
{
in = fopen("algsort.in", "r");
out = fopen("algsort.out", "w");
}
void close_files()
{
fclose(in);
fclose(out);
}
void process_data(FILE *in)
{
int el;
fscanf(in,"%d", &N);
fscanf(in,"%d", &el);
initialise_heap(&root, el);
for (int i = 2;i <= N;++i)
{
fscanf(in,"%d", &el);
add_to_heap(root,el);
}
heap_sort(root, sorted_vector);
}
void output_data(FILE *out)
{
for (int i = 1;i <= sorted_vect_size;++i)
fprintf(out, "%d ", sorted_vector[i]);
}
int main()
{
initialise_files();
process_data(in);
output_data(out);
close_files();
return 0;
}