Сортировка файлов естественным слиянием

Раздел
Программирование
Предмет
Просмотров
468
Покупок
0
Антиплагиат
Не указан
Размещена
22 Янв 2019 в 15:28
ВУЗ
КГУ
Курс
2 курс
Стоимость
400 ₽
Файлы работы   
1
Каждая работа проверяется на плагиат, на момент публикации уникальность составляет не менее 40% по системе проверки eTXT.
zip
10-12-2018_12-39-02
211.5 Кбайт 400 ₽
Описание
Оглавление

Приложение А

(программный код)

#include <iostream>

#include <stdlib.h>

#include <time.h>

#include <windows.h>

using namespace std;

//вывод содержимого файла

void Print_File(char *name){

        int c;

        FILE *x;

        x = fopen(name,"r");

        

        while(!feof(x)){

                  fscanf(x,"%d",&c);

                  cout<<c<<" ";                                 

        }

        fclose(x);

        cout<<endl<<endl;

}

//определение конца блока

bool End_Range (FILE * f){

 int tmp;

 tmp = fgetc(f);

 tmp = fgetc(f);

 if (tmp != '\'') fseek(f,-2,1);

 else fseek(f,1,1);

 return tmp == '\'' ? true : false;

}

//Описание функции сортировки естественным слиянием

int Natural_Merging_Sort(char *name){

 int s1, s2, a1, a2, mark, count;

 FILE *f, *f1, *f2;                                    //объявляем файловые переменные

 s1 = s2 = 1;

 count=0;                                                //колво фаз

 while ( s1 > 0 && s2 > 0 ){           //условие выхода - отсортированая последовательность

   mark = 1;

   count++;

   s1 = 0;

   s2 = 0;

   f = fopen(name,"r");                    //открываем файл для чтения

   f1 = fopen("nmsort_1","w");                //открываем 2 файла для записи и начинаем распределение чисел

   f2 = fopen("nmsort_2","w");

   fscanf(f,"%d",&a1);                              //считываем первое число

   if ( !feof(f) ) {

     fprintf(f1,"%d ",a1);                  //записывем число в первый файл

   }

   if ( !feof(f) ) fscanf(f,"%d",&a2);           //считываем второе число

   while ( !feof(f) ){

     if ( a2 < a1 ) {                            //если серия закончилась

       switch (mark) {                                 //маркер конца серии   

         case 1:{fprintf(f1,"' "); mark = 2; s1++; break;} //если серия закончилась то маркером меняем файл в который идет запись

         case 2:{fprintf(f2,"' "); mark = 1; s2++; break;}

       }

     }

     if ( mark == 1 ) { fprintf(f1,"%d ",a2); s1++; }                //запись в файл

     else { fprintf(f2,"%d ",a2); s2++;}

     a1 = a2;

     fscanf(f,"%d",&a2);         //считываем следующее число

   }

   if ( s2 > 0 && mark == 2 ) { fprintf(f2,"'");}

   if ( s1 > 0 && mark == 1 ) { fprintf(f1,"'");}

   fclose(f2);                 //закрываем файлы

   fclose(f1);

   fclose(f);

............ и т д

Список литературы

Описание + программа

Вам подходит эта работа?
Похожие работы
C/C++
Лабораторная работа Лабораторная
18 Авг в 15:52
78 +1
0 покупок
C/C++
Контрольная работа Контрольная
27 Июн в 22:59
90
0 покупок
C/C++
Контрольная работа Контрольная
20 Апр в 19:57
91 +1
2 покупки
C/C++
Контрольная работа Контрольная
20 Апр в 19:54
58
0 покупок
Темы журнала
Показать ещё
Прямой эфир