Условие задачи

В файле 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;
}