Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализации различных алгоритмов на Си / Сортировка - с помощью дерева (нет блок схемы)

.doc
Скачиваний:
17
Добавлен:
20.06.2014
Размер:
68.61 Кб
Скачать

Текст программы

#include <stdio.h>

#include <windows.h>

void PRINT(char str[]) {

char buf[200];

CharToOem(str,buf);

printf("%s ",buf);

}

typedef struct tree {

int a;

struct tree *left;

struct tree *right;

} TREE;

TREE *add_to_tree(TREE *root, int new_value){

if (root==NULL) {

root = (TREE*)malloc(sizeof(TREE));

root->a = new_value;

root->left = root->right = 0;

return root;

}

if (root->a < new_value)

root->right = add_to_tree(root->right, new_value);

else

root->left = add_to_tree(root->left, new_value);

return root;

}

void tree_to_array(TREE *root, int a[]) {

static max2=0;

if (root==NULL) return;

tree_to_array(root->left, a);

a[max2++] = root->a;

tree_to_array(root->right, a);

free(root);

}

void sort_tree(int a[], int elem_total) {

TREE *root;

int i;

root = NULL;

for (i=0;i<elem_total;i++) root = add_to_tree(root, a[i]);

tree_to_array(root, a);

}

void main(void) {

FILE* file_from, *file_to;

int *arr;

int fend,i=0,j;

char in_name[40],out_name[40];

PRINT("Имя файла данных: ");

scanf("%s",&in_name);

PRINT("Имя выходного файла: ");

scanf("%s",&out_name);

file_from = fopen(in_name,"r");

file_to = fopen(out_name,"w+");

if (file_from != NULL) {

fseek(file_from,0,SEEK_END);

fend = ftell(file_from);

arr = (int*)malloc(fend*sizeof(int));

fseek(file_from,0,SEEK_SET);

PRINT("Данные из файла");

printf("%s",in_name);

PRINT(" до сортировки:\n");

while (ftell(file_from) < fend) {

fscanf(file_from,"%d",&arr[i]);

printf("%d ",arr[i]);

i++;

}

PRINT("\n\nДанные после сортировки, которые будут записаны в файл");

printf("%s:\n",out_name);

sort_tree(arr,i);

for (j=0;j<i;j++) {

fprintf(file_to,"%d ",arr[j]);

printf("%d ",arr[j]);

}

}else PRINT("Ошибка. Нет такого файла данных!!!\n");

printf("\n\n");

system("pause");

}