Условие задачи
В файле task.in заданы числа len1 и len2, а затем два отсортированных по неубыванию массива длинами len1 и len2.
Произвести слияние этих массивов в третий, также отсортированный по неубыванию.
Алгоритм должен работать за линейное время.
Результат вывести в task.out
#include <stdio.hgt;
int getLen(FILE *in) {
int size;
fscanf(in, "%d", &size);
return size;
}
void arrayFill(FILE *in, int array[], int limit) {
for ( int i = 0; i < limit && fscanf(in, "%d", &array[i]) > 0; i++ );
}
void arrayPrint(FILE *out, int array[], int size) {
size = size - 1;
for ( int i = 0; i < size; i++ ) {
fprintf(out, "%d ", array[i]);
}
fprintf(out, "%d\n", array[size]);
}
void arraySort(int array[], int size) {
int temp = 0;
int nextIndex;
size = size - 1;
for ( int i = 0; i < size; i++ ) {
for ( int j = 0; j < size; j++ ) {
if ( array[j] >= array[j+1] ) {
temp = array[j];
nextIndex = j + 1;
array[j] = array[nextIndex];
array[nextIndex] = temp;
}
}
}
}
int main() {
FILE *in = fopen("task.in", "r");
FILE *out = fopen("task.out", "w");
int len1 = getLen(in);
int len2 = getLen(in);
int size = len1 + len2;
int array1[len1], array2[len2], dst[size];
int indexPosition;
arrayFill(in, array1, len1);
arrayFill(in, array2, len2);
fclose(in);
for ( int i = 0; i < len1; i++ ) {
dst[i] = array1[i];
}
for ( int i = 0; i < len2; i++ ) {
indexPosition = len1 + i;
dst[indexPosition] = array2[i];
}
arraySort(dst, size);
arrayPrint(out, dst, size);
fclose(out);
return 0;
}