26 #ifndef __TERRALIB_SAM_KDTREE_INTERNAL_PARTITION_H 
   27 #define __TERRALIB_SAM_KDTREE_INTERNAL_PARTITION_H 
   46       template<
class CONTAINER, 
class COMPFUNCTOR>
 
   47       void HoareFind(CONTAINER& 
A, 
const std::size_t& kthElement, 
const std::size_t& firstElement, 
const std::size_t& lastElement, 
const COMPFUNCTOR& compFunctor)
 
   49         std::size_t m = firstElement;
 
   50         std::size_t n = lastElement;
 
   53         if(kthElement < firstElement || kthElement > lastElement)
 
   62           typename CONTAINER::value_type r = 
A[kthElement];
 
   66             while(compFunctor(
A[i], r))
 
   69             while(compFunctor(r, 
A[j]))
 
   74               typename CONTAINER::value_type w = 
A[i];
 
   86           else if(i <= kthElement) 
 
  105       template<
class CONTAINER, 
class LESSTHANX, 
class LESSTHANY>
 
  106       void kdsort(CONTAINER& dataSet, 
const std::size_t& first, 
const std::size_t& last, 
const char& level, 
const LESSTHANX& lessThanCompFunctorByX, 
const LESSTHANY& lessThanCompFunctorByY)
 
  108         const std::size_t kth = (last - first + 1) / 2;
 
  113           HoareFind(dataSet, first + kth, first, last, lessThanCompFunctorByX);
 
  116           if(first + kth > first)
 
  117             kdsort(dataSet, first, first + kth - 1, 
'y', lessThanCompFunctorByX, lessThanCompFunctorByY);
 
  119           if((first + kth) < last)
 
  120             kdsort(dataSet, first + kth + 1, last, 
'y', lessThanCompFunctorByX, lessThanCompFunctorByY);
 
  125           HoareFind(dataSet, first + kth, first, last, lessThanCompFunctorByY);
 
  128           if(first + kth > first)
 
  129             kdsort(dataSet, first, first + kth - 1, 
'x', lessThanCompFunctorByX, lessThanCompFunctorByY);
 
  131           if(first + kth < last)
 
  132             kdsort(dataSet, first + kth + 1, last, 
'x', lessThanCompFunctorByX, lessThanCompFunctorByY);
 
void HoareFind(CONTAINER &A, const std::size_t &kthElement, const std::size_t &firstElement, const std::size_t &lastElement, const COMPFUNCTOR &compFunctor)
This function partition the container in two parts: k-1 elements to the left (elements less than or e...
 
void kdsort(CONTAINER &dataSet, const std::size_t &first, const std::size_t &last, const char &level, const LESSTHANX &lessThanCompFunctorByX, const LESSTHANY &lessThanCompFunctorByY)
This partition the container like a bidimensional K-d Tree using Hoare algorithms.