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;
}
ठीक है ... मुझे लगता है कि इस छोटे से कोड को स्पष्टीकरण की आवश्यकता है।
सबसे पहले मैंने दो अंतर के साथ काम करने की कोशिश की, जिसमें न्यूनतम अंतर पाया गया और बी के मूल्य के न्यूनतम मूल्य को निर्धारित किया। यह बहुत बुनियादी है।
उसी चीज के साथ पहुंचा जा सकता है qort के और एक तुलनित्र फ़ंक्शन के है। मैं इसे B के तत्वों के बजाय अंतर के अनुसार B बनाता हूं। इस तरह के एक छोटे एल्गोरिथ्म के लिए बहुत सारे कार्य। तो फ़ंक्शन q अब दो उद्देश्यों को पूरा करता है। सबसे पहले, यह एल्गोरिथ्म ही है, दूसरा (जब qsort इसे कहता है) एक तुलनित्र। दोनों राज्यों के बीच संचार के लिए, मुझे ग्लोबल्स घोषित करना पड़ा।
मीटर का अर्थ है कि यह तुलनित्र स्थिति में है या मुख्य है एक है।
उदाहरण:
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