क्या किसी के पास बैचर के मर्ज-एक्सचेंज सॉर्ट की अच्छी मार्गदर्शिका/स्पष्टीकरण है?बैचर का मर्ज-एक्सचेंज सॉर्ट करें
यह बैचर के बिटोनिक सॉर्ट या बैचर के अजीब-यहां तक कि मर्ज सॉर्ट के समान एल्गोरिदम नहीं है, हालांकि कई लेख बताते हैं कि यह है।
क्या किसी के पास बैचर के मर्ज-एक्सचेंज सॉर्ट की अच्छी मार्गदर्शिका/स्पष्टीकरण है?बैचर का मर्ज-एक्सचेंज सॉर्ट करें
यह बैचर के बिटोनिक सॉर्ट या बैचर के अजीब-यहां तक कि मर्ज सॉर्ट के समान एल्गोरिदम नहीं है, हालांकि कई लेख बताते हैं कि यह है।
डोनाल्ड Knuth, कंप्यूटर प्रोग्रामिंग की कला, एल्गोरिदम 5.2.2 एम (वॉल्यूम III, पृष्ठ 111)।
केन बैचर (1 9 68), "Sorting networks and their application", प्रो। AFIPS स्प्रिंग संयुक्त कंप्यूटर सम्मेलन 32: 307-314।
से http://www.eli.sdsu.edu/courses/spring96/cs662/notes/batcher/batcher.html
Input: N and array A[1:N] of items to sort
set T = Ceiling(lg(N))
for P = 2T-1, 2T-2, 2T-3, ..., 1 do
R = 0, D = P
for Q = 2T-1, 2T-2, 2T-3, ..., P do
for (K = 1 to N - D) and ((K-1) P) = R do in parallel
if A[K] > A[K + D] then
swap(A[K], A[K + D ])
end if
end for
D = Q - P
R = P
end for
end for
(K + 1) P means logical and of K and P
If number of processors is less than N than the swap becomes a merge
This site इस एल्गोरिथ्म के एक दृश्य है
ठीक है ... तो यहां कोड है, यह कैसे काम करता है? क्या आप इसे टिप्पणी कर सकते हैं? – user108088
विज़ुअलाइजेशन पेज पर एक नज़र डालें, यह दिखाता है कि यह कैसे काम करता है और इसके द्वारा किए गए स्वैप दोनों की एक तस्वीर दिखाती है। –
सरल कार्यान्वयन :)
int FloorLog2(int value)
{
int result = -1;
for (int i = 1; i < value; i <<= 1, ++result);
return result;
}
void BatcherSort(int* array, int length)
{
int t = FloorLog2(length);
int p0 = (1 << t);
int p = p0;
do
{
int q = p0;
int r = 0;
int d = p;
while (r == 0 || q != p)
{
if (r != 0)
{
d = q - p;
q >>= 1;
}
for (int i = 0; i < length - d; ++i)
{
if (((i & p) == r) && array[i] > array[i + d])
{
int swap = array[i];
array[i] = array[i + d];
array[i + d] = swap;
}
}
r = p;
}
p >>= 1;
}
while (p > 0);
}
मुझे याद है के रूप में, उस अनुभाग एल्गोरिथ्म और शुद्धता का प्रमाण, दे दी है लेकिन यह कैसे अंतर्निहित है या यह कैसे आया इसके बारे में कोई अंतर्ज्ञान नहीं आया। – user108088
Knuth एक ग्रिड के बार-बार फोल्डिंग के मामले में एक ज्यामितीय व्याख्या देता है (पृष्ठ 113 देखें)। यह आपके अंतर्ज्ञान की सहायता कर सकता है। इसके अलावा, मैंने बैचर के मूल पेपर को मेरे जवाब में जोड़ा; और यदि वह आपकी मदद करने में विफल रहता है, तो क्यों नहीं [आदमी से पूछें] (http://www.cs.kent.edu/~batcher/)? –