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;
}
Okay ... Ich denke, dieser kleine Code muss erklärt werden.
Zuerst habe ich versucht, die Arbeit mit zwei Ebenen von for loop zu erledigen, um die minimale Differenz zu ermitteln und den aktuellen Wert auf min von B's Wert zu setzen. Das ist sehr einfach.
Dasselbe kann mit qsort und einer Komparatorfunktion erreicht werden. Ich sorge dafür, dass B nach dem Unterschied sortiert wird und nicht nach den Elementen von B. Zu viele Funktionen für einen so kleinen Algorithmus. Die Funktion q dient also nun zwei Zwecken. Erstens ist es der Algorithmus selbst, zweitens (wenn qsort ihn aufruft) ein Komparator. Für die Kommunikation zwischen den beiden Staaten musste ich Globals deklarieren.
m steht für, ob es im Komparatorzustand oder im Hauptzustand ist .
Beispiel:
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