C 144 163
#define f float
f T, *C, m;
f *q(f *A, f *B, int S, f s)
{
if(m)
return abs(T - *A) - abs(T - *B);
for (
C = malloc(S * 4);
m = S--;
C[S] = *B
)
T = A[S],
qsort(B, s, 4, q);
return C;
}
D'accord ... Je pense que ce petit code a besoin d'explications.
Au début, j'ai essayé de faire le travail avec deux niveaux de boucle pour trouver la différence min et régler la valeur actuelle sur min de la valeur de B. C'est très basique.
La même chose peut être atteinte avec qsort et une fonction de comparaison. Je le fais trier B par différence au lieu des éléments de B. Trop de fonctions pour un si petit algorithme. La fonction q a donc deux fonctions. Au début, c'est l'algorithme lui-même, ensuite (quand qsort l'appelle) un comparateur. Pour la communication entre les deux états, j'ai dû déclarer des globaux.
m signifie que ce soit dans un état de comparaison ou le principal .
exemple:
float A[] = {1.5, 5.6, 8.9, -33.1};
float B[] = {-20.1, 2.2, 10.3};
float *C;
C = q(A, B, sizeof(A)/sizeof(*A), sizeof(B)/sizeof(*B));
// C holds 2.2,2.2,10.3,-20.1