Более конкретно, я хочу объединить два отсортированных списка целых чисел в третий список, который также отсортирован. Я не могу понять, почему мой код не работает! Вот некоторые примеры записей и код, который я сделал:
Файл1:
1
2
3
4
5
6
Файл2:
7
8
9
9
9
10
Код C:
#include <stdio.h>
#include <stdlib.h>
void merge(char* arq1, char* arq2){
FILE* final;
final = fopen("merge.txt",'w');
FILE* f1 = fopen(arq1,'rt');
FILE* f2 = fopen(arq2,'rt');
if(!f1 || !f2) exit(1);
// n1 and n2 represents the actual value that's been read. r1 and r2 the status of each file.
int n1,n2,r1,r2,equal;
r1 = fscanf(f1,"%d",&n1);
r2 = fscanf(f2,"%d",&n2);
while(r1 || r2){
if((!r1) || (n2 < n1)){
fprintf(final,"%d ",n2);
r2 = fscanf(f2,"%d",&n2);
}else if((!r2) || (n1 < n2)){
fprintf(final,"%d ",n1);
r1 = fscanf(f1,"%d",&n1);
}else{
equal = n1;
fprintf(final,"%d ",equal);
while(n1 == equal) r1 = fscanf(f1,"%d",&n1);
while(n2 == equal) r2 = fscanf(f2,"%d",&n2);
}
}
fclose(final);
fclose(f1);
fclose(f2);
}
int main(int argc, char const *argv[]){
merge("merge1.txt","merge2.txt");
return 0;
}
Предполагается, что алгоритм работает следующим образом:
Хотя по крайней мере один из файлов все еще имеет содержимое, его содержимое будет сохранено в файле merge.txt
. Если файлы 1 и 2 будут иметь одинаковое содержимое, я сохраню содержимое и заставлю 2 файла читать, пока они не найдут другое значение, чтобы объединенный файл не имел повторяющихся значений.
Как объединитьдва отсортированных файла в один отсортированный файл?