2 / 2 / 0
Регистрация: 27.04.2020
Сообщений: 73
1

Двухфазная естественная сортировка с 3-мя вспомогательными файлами

24.03.2023, 21:29. Показов 827. Ответов 0

Author24 — интернет-сервис помощи студентам
Кто может помочь сделать двухфазную естественную сортировку с 3-мя вспомогательными файлами?
У меня есть с 2-мя, но я не понимаю, как это переделать под сортировку с 3-мя.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
 
using namespace std;
 
bool comp(pair <int, int> a, pair <int, int> b) { // сравнение пары из двух чисел по первому числу
return a.first < b.first;
}
int main()
{
srand(time(0));
setlocale(LC_ALL, "Russian");
const int fc = 5; // количество файлов
pair <FILE*, int> f[fc]; // файлы с количеством считанных на данном шаге элементов
pair <int, int> fi[2]; // значение (1), считанное из файла с номером (2)
int n; // размер файла
cout « "Введите количество чисел" « endl;
cin » n;
fopen_s(&f[0].first, "1.txt", "w");
fopen_s(&f[1].first, "2.txt", "w");
fopen_s(&f[2].first, "3.txt", "w");
fopen_s(&f[3].first, "4.txt", "w");
fopen_s(&f[4].first, "5.txt", "w");
int step = 1; // текущий шаг
for (int i = 0; i < n; i++) // генерация файла с заданным числом элементов
{
fprintf(f[2].first, "%d\n", rand() % 100);
}
_fcloseall();
fopen_s(&f[0].first, "1.txt", "w");
fopen_s(&f[1].first, "2.txt", "w");
fopen_s(&f[2].first, "3.txt", "r");
fopen_s(&f[3].first, "4.txt", "w");
fopen_s(&f[4].first, "5.txt", "w");
for (int i = 0; i < n; i++)
{
char buf[50];
fgets(buf, 50, f[2].first);
int b = atoi(buf);
fprintf(f[i % 2].first, "%d\n", b);
}
fflush(f[2].first);
int k = 1; // количество элементов, берущихся в набор из каждого массива
bool flag = true;
while (flag) // пока количество элементов в наборе меньше общего числа элементов
{
if (k * 2 < n == false)
{
flag = !flag;
}
_fcloseall();
if (step == 1)
{
fopen_s(&f[0].first, "1.txt", "r");
fopen_s(&f[1].first, "2.txt", "r");
fopen_s(&f[2].first, "3.txt", "w");
fopen_s(&f[3].first, "4.txt", "w");
fopen_s(&f[4].first, "5.txt", "w");
}
else
{
fopen_s(&f[0].first, "1.txt", "w");
fopen_s(&f[1].first, "2.txt", "w");
fopen_s(&f[2].first, "3.txt", "r");
fopen_s(&f[3].first, "4.txt", "r");
fopen_s(&f[4].first, "5.txt", "w");
}
int c = 0, m = 0; //количество записанных элементов и номер файла для записи
bool flag = true; // после того как к станет равным размеру набора в последний раз запишем его
while (c < n)
{
for (int jj = 0; jj < 2; jj++)
{
int j = abs(step - 1) * 2 + jj; // считывание из файлов в зависимости от итерации
f[j].second = k - 1; // из файла на текущей итерации считывается k элементов
if (!feof(f[j].first)) // из файла не считаны все элементы
{
char buf[256];
fgets(buf, 256, f[j].first);
fi[jj].first = atoi(buf);
fi[jj].second = j;
}
else
{
fi[j].first = INT_MAX; // чтобы при сортировке был крайним справа
fi[j].second = j;
}
}
stable_sort(fi, fi + 2, comp); // сортировка набора
while (fi[0].second > -1) // пока не записаны все значения
{
c++;
fprintf(f[step * 2 + m].first, "%d\n", fi[0]); // слева наименьший элемент, записываем его в новый набор
if (!feof(f[fi[0].second].first) && f[fi[0].second].second > 0) // считывание нового элемента из файла старого, если записанный не последний
{
f[fi[0].second].second--;
char buf[256];
fgets(buf, 256, f[fi[0].second].first);
fi[0].first = atoi(buf);
}
else
{
fi[0].first = INT_MAX;
fi[0].second = -1;
}
stable_sort(fi, fi + 2, comp);
}
m = (m + 1) % 2;
}
step = (step + 1) % 2; // смена набора
k *= 2; // увеличение размера набора
}
_fcloseall();
if (step == 1) // результат лежит в а
{
fopen_s(&f[0].first, "1.txt", "r");
fopen_s(&f[2].first, "3.txt", "w");
for (int i = 0; i < n; i++)
{
char buf[50];
fgets(buf, 50, f[0].first);
int b = atoi(buf);
fprintf(f[2].first, "%d\n", b);
}
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2023, 21:29
Ответы с готовыми решениями:

Естественная сортировка слиянием с 3 вспомогательными файлами
Здесь код для сортировки с 2 вспомогательными файлами, нужно переделать под 3 вспомогательных...

Двухфазная естественная сортировка
Помогите, пожалуйста, доработать код до рабочего состояния. //Описание функции сортировки...

двухфазная сортировка
кто знает эту сортировку, и как правильно ее переделать, чтобы она сортировала по убыванию? /*...

многопутевая двухфазная сортировка.
Всем привет. Нарыл в недрах инета сортировку, которая сортировала числа в файле. Мне нужно по...

0
24.03.2023, 21:29
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2023, 21:29
Помогаю со студенческими работами здесь

Естественная сортировка
Ребят напишите пожалуйста пример программы ЕСТЕСТВЕННОЙ СОРТИРОВКИ ИЛИ СОРТИРОВКИ СЛИЯНИЕМ , самой...

[C++] Двухфазная внешняя сортировка простым слиянием (помогите найти ошибку)
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;Windows.h&gt; #include...

Естественная сортировка слияния
Имеется N человек и целые числа А1, ..., AN; человека i необходимо познакомить с Аi*людьми. Можно...

Естественная сортировка по алфавиту в DataGridView
Продолжение всего того же. Сортировка по кодам символов - это не тоже самое, что естественная...

«Естественная» сортировка столбца дробных значений с разделителем, заданным точкой
Уважаемые программисты, прошу помочь со следующей проблемой. Есть столбцы целочисленных и дробных...

Рисунки со вспомогательными функциями
Напишите вспомогательную функцию f, которая рисует треугольник по двум сторонам и углу между ними....

Программа со вспомогательными функциями
Требуется составить программу, используя вспомогательные функции. Определите функцию (f s),...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru