1 #ifndef GIM_RADIXSORT_H_INCLUDED
2 #define GIM_RADIXSORT_H_INCLUDED
45 template<
class T,
class Z>
48 return ( a<b?-1:(a>b?1:0));
139 #define D11_0(x) (x & 0x7FF)
140 #define D11_1(x) (x >> 11 & 0x7FF)
141 #define D11_2(x) (x >> 22 )
154 for (i = 0; i < kHist * 3; ++i)
160 for (i = 0; i < element_count; ++i)
168 GUINT sum0 = 0, sum1 = 0, sum2 = 0;
170 for (i = 0; i <
kHist; ++i)
183 for (i = 0; i < element_count; ++i)
191 for (i = 0; i < element_count; ++i)
193 fi = sorted[i].
m_key;
199 for (i = 0; i < element_count; ++i)
219 template<
typename T,
class GETKEY_CLASS>
223 GUINT element_count,GETKEY_CLASS uintkey_macro)
226 for (
GUINT _i=0;_i<element_count;++_i)
228 _unsorted[_i].
m_key = uintkey_macro(array[_i]);
244 template<
typename T,
class GETKEY_CLASS,
class COPY_CLASS>
246 T * array,
GUINT element_count,
247 GETKEY_CLASS get_uintkey_macro, COPY_CLASS copy_elements_macro)
251 T * _original_array = (T *)
gim_alloc(
sizeof(T)*element_count);
253 for (
GUINT _i=0;_i<element_count;++_i)
255 copy_elements_macro(array[_i],_original_array[_sorted[_i].m_value]);
272 template<
class T,
typename KEYCLASS,
typename COMP_CLASS>
274 const T* _array,
GUINT _start_i,
276 const KEYCLASS & _search_key,
277 COMP_CLASS _comp_macro)
286 _comp_result = _comp_macro(_array[_k], _search_key);
287 if (_comp_result == 0)
292 else if (_comp_result < 0)
319 const T*_array,
GUINT _start_i,
320 GUINT _end_i,
const T & _search_key,
321 GUINT & _result_index)
329 if(_array[_k]==_search_key)
334 else if (_array[_k]<_search_key)
350 template <
typename T,
typename COMP_CLASS>
356 T temp = pArr[k - 1];
362 if ((child < (
int)n) && CompareFunc(pArr[child - 1] , pArr[child])<0)
367 if (CompareFunc(temp , pArr[child - 1])<0)
370 pArr[k - 1] = pArr[child - 1];
382 template <
typename T,
typename COMP_CLASS>
387 GUINT n = element_count;
388 for (k = n/2; k > 0; k--)
406 #endif // GIM_RADIXSORT_H_INCLUDED