i и j не нужно увеличивать на каждой итерации.Увеличьте i, если A [i] Создайте цикл, продолжающийся до тех пор, пока i<n
и j<m
:
for(i=0, j=0, k=0; j<m && i<n; k++)
{
if ( A[i] < B[j] )
C[k] = A[i++];
else
C[k] = B[j++];
}
В концеэтот цикл либо i == n
, либо j == m
, но он не может быть заполнен обоими одновременно.
Поэтому вам необходимо скопировать недостающий остаток в контейнер:
for(; i<n; i++, k++)
C[k] = A[i];
for(; j<m; j++, k++)
C[k] = B[j];
Полный код может выглядеть следующим образомэто:
void fus(int *A, int *B, int *C, int n, int m)
{
int i=0, j=0, k=0;
for(; j<m && i<n; k++)
C[k] = A[i] < B[j] ? A[i++] : B[j++];
for(; i<n; i++, k++)
C[k] = A[i];
for(; j<m; j++, k++)
C[k] = B[j];
}
Конечно, это может быть даже выражено короче:
void fus(int *A, int *B, int *C, int n, int m)
{
int i=0, j=0, k=0;
while (i<n || j<m)
C[k++] = i!=n && (j==m || A[i] < B[j]) ? A[i++] : B[j++];
}