Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xGSx
Сообщений: n/a
#1

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

05.05.2010, 01:24. Просмотров 339. Ответов 0
Метки нет (Все метки)

Требуется в заданном бинарнике отсортировать структуры по "части" name методом слияния. Я никак не могу понять алгоритм этого метода... Вот функция, которая должна сортировать файл, но пока она лишь делит его пополам. Насколько я понял, она должна быть рекурсивной, но вот какие именно данные подавать ей на вход и как с ними работать - в этом я разобраться не могу. В атаче вся программа и "база", с которой она должна работать. Помогите пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
struct catalog
{ char del; char shifr[10], name[20], fio[15],izdat[15];
int year;char nalic[4];} catal, tmp,tmp1,tmp2;
FILE *f; char filename[]="catalog.dat", filename_tmp[]="tmp.dat";
FILE *t;
char zvez (int i)
{if (i==1) return '*';else return ' ';}
 
int num=24; // Количество структур в файле, задаю явно, для начала
void sort(int num)
 {  int shag=1, schet=0, c1=0, c2=0; catalog cat1,cat2; clrscr();
FILE *file, *f1, *f2;              int zap1, zap2;
 
    int flag=0;
    f1=fopen ("f1.dat","wb");
    f2=fopen ("f2.dat","wb");
    schet=0;
    file=fopen(filename,"rb");
    rewind (file);
    // razbivaem nash fajl na dva
    while ( fread(&tmp, sizeof(catalog), 1, file) )
        {
        if (flag==0)
            {
            fwrite (&tmp, sizeof(catalog), 1, f1); schet++; c1++;
            if (schet==shag) {flag=1; schet=0;}
            }
        else
            {
            fwrite (&tmp, sizeof(catalog), 1, f2); schet++; c2++;
            if (schet==shag) {flag=0; schet=0;}
            }
        }
    fclose (f1); fclose (f2); fclose (file);
 
    f1=fopen ("f1.dat","rb"); rewind(f1);
    f2=fopen ("f2.dat","rb"); rewind(f2);
    file=fopen(filename,"wb"); rewind(file);
    while ( (fread(&tmp1, sizeof(catalog), 1, f1))&&(fread(&tmp2, sizeof(catalog), 1, f2)) )
      {
      if (strcmp(tmp1.name,tmp2.name)<0)
      fwrite (&tmp1,sizeof(catalog),1,file);
      else
      fwrite (&tmp2,sizeof(catalog),1,file);
      }
 
  getch();
 }
Вложения
Тип файла: rar Z71V13.rar (2.7 Кб, 17 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2010, 01:24     Сортировка слиянием в файле
Посмотрите здесь:

C++ Сортировка слиянием
C++ сортировка слиянием
C++ Сортировка слиянием
C++ сортировка слиянием
Сортировка слиянием С++ C++
C++ Сортировка с слиянием
C++ Сортировка слиянием
Сортировка слиянием C++
Сортировка слиянием C++
Сортировка слиянием C++
Сортировка слиянием C++
Сортировка слиянием C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru