Сортировка слиянием Си
Пожалуйста помогите реализовать функцию
int merge ( const int *a , int ak , const int *b , int bk , int * res );
Где а - первая последовательность. Уже отсортирована по возрастанию
аk - кол-во элементов в а
b - вторая последовательность. Уже отсортирована по возрастанию
bk - кол-во элементов b
res - последовательность которая должна получится после слияния.
мой неработающий код:
#include <stdlib.h>
#include <stdio.h>
void merge ( const int *a , int ak , const int *b , int bk , int * res )
{
if (ak > bk) {
for (int j = 0; j < ak; j++){
if (a[j] > b[j]) res[j] = a[j];
else res[j] = b[j];
}
} else {
for (int j = 0; j < bk; j++){
if (a[j] > b[j]) res[j] = a[j];
else res[j] = b[j];
}
}
}
int main()
{
FILE* inside = fopen("imp.txt", "rb");
FILE* outside = fopen("ump.txt","wb");
unsigned int n;
fread(&n, sizeof(n), 1, inside); //first 4 bytes
int *pn = malloc(n * sizeof(n));
unsigned int m;
fread(&m, sizeof(m), 1, inside);
int *pm = malloc(m * sizeof(m));
for(int w = 0; w < n; w++){
fread(&pn[w], sizeof(n), 1, inside);
}
for(int w = 0; w < n; w++){
fread(&pm[w], sizeof(m), 1, inside);
}
int *result = malloc(n * sizeof(int));
merge(pn, n, pm, m, result);
fwrite(&result,sizeof(result), 1, outside);
fclose(inside);
fclose(outside);
return 0;
}
}