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;
}
Oke ... Saya rasa kode kecil ini perlu penjelasan.
Pada awalnya saya mencoba melakukan pekerjaan dengan dua level untuk loop menemukan perbedaan min dan mengatur nilai saat ini ke nilai min B. Itu sangat mendasar.
Hal yang sama dapat dicapai dengan fungsi qsort dan komparator. Saya membuatnya menjadi B berdasarkan perbedaan, bukan elemen B. Terlalu banyak fungsi untuk algoritma sekecil itu. Jadi fungsi q sekarang melayani dua tujuan. Pada awalnya, ini adalah algoritma itu sendiri, kedua (ketika qsort menyebutnya) komparator. Untuk komunikasi antara kedua negara, saya harus menyatakan global.
m adalah singkatan dari apakah itu dalam keadaan komparator atau yang utama .
contoh:
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