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;
}
โอเค ... ฉันคิดว่ารหัสเล็กน้อยนี้ต้องการคำอธิบาย
ตอนแรกฉันพยายามทำงานด้วยสองระดับสำหรับวนรอบเพื่อค้นหาความแตกต่างขั้นต่ำและตั้งค่าปัจจุบันเป็นค่าขั้นต่ำของ B นั่นเป็นพื้นฐานมาก
สิ่งเดียวกันสามารถเข้าถึงได้ด้วยqsortและฟังก์ชันตัวเปรียบเทียบ ฉันจัดเรียง B ตามความแตกต่างแทนองค์ประกอบของ B มีฟังก์ชันมากเกินไปสำหรับอัลกอริธึมเล็กน้อย ดังนั้นตอนนี้ฟังก์ชั่น q มีจุดประสงค์สองประการ ในตอนแรกมันเป็นอัลกอริธึมที่สอง (เมื่อ qsort เรียกมันว่า) ตัวเปรียบเทียบ สำหรับการสื่อสารระหว่างสองรัฐฉันต้องประกาศกลม
mย่อมาจากไม่ว่าจะอยู่ในสถานะเปรียบเทียบหรือหนึ่งหลัก
ตัวอย่าง:
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