मैं उन कार्यान्वयन से परिचित नहीं हूँ, लेकिन यहाँ केवल पूर्णांकों के लिए, मेरे कार्यान्वयन में से एक में आंतरिक समारोह है:
//-------------------------------------------------------------------------------------
//! sort the source array based on b-th byte and store the result in destination array
//! and keep index (how to go from the sorted array to the un-sorted)
template<typename T, typename SS, typename SD> inline
void radix_sort_byte(size_t b, array<T, SS>& src, array<T, SD>& dest,
size_array& ind_src, size_array& ind_dest)
{
b *= 8;
size_t B = 256, N = src.size();
size_array bytes = (src >> b) & 0xff; // current byte of each element
size_array count(B, size_t(0)); // occurrences of each element
++count[bytes];
if(count[0] == N) // all bytes are zero; order remains unchanged
{ dest = src; ind_dest = ind_src; return; }
size_array index = shift(cumsum(count), 1); // index-list for each element
size_array pos(N); // position of each element in the destination array
for(size_t i=0; i<N; i++) pos[i] = index[bytes[i]]++;
dest[pos] = src; // place elements in the destination array
ind_dest[pos] = ind_src; // place indices
}
यह सीधे पठनीय है क्योंकि यह सहायक संरचनाओं और कार्यों के बहुत सारे का उपयोग करता है नहीं है, लेकिन विचार यह है कि आप सूचकांक के साथ एक अलग सरणी रखते हैं। एक बार आपके पास गंतव्य सरणी (pos) में तत्वों की स्थिति हो जाने के बाद, अंतिम दो पंक्तियां वैल्यू सरणी और इंडेक्स सरणी को उसी तरह अद्यतन करती हैं।
मुझे लगता है कि आप किसी भी कार्यान्वयन के लिए एक ही विचार लागू कर सकते हैं, लेकिन आपको कोड को संशोधित करना होगा।
रैडिक्स सॉर्ट तुलनात्मक सॉर्टिंग विधि नहीं है, यही कारण है कि यह सबसे तुलनात्मक तरीकों से बेहतर प्रदर्शन करता है। – plasmacel
उम्मम्म। मुझे पूरा यकीन है कि ओपी के पास * तुलनात्मक प्रकार * के बारे में पर्याप्त विचार है। इस सवाल का विषय नहीं है। – WhozCraig
@ प्लाज्मा: फिर भी, दिखाया गया तकनीक (संकेत डालने का) रेडिक्स सॉर्ट के लिए समान रूप से अच्छी तरह से काम करना चाहिए। आप 'डेटा [इंडेक्स]' से अंकों का परीक्षण करेंगे, लेकिन फिर संबंधित बाल्टी में 'अनुक्रमणिका' डालेंगे। –