#ifndef CA_UWATERLOO_ALUMNI_DWHARDER_SELECTION_SORT_POINTER #define CA_UWATERLOO_ALUMNI_DWHARDER_SELECTION_SORT_POINTER namespace Sorting_algorithms { namespace Selection_sort { class Pointer { public: template static void sort( Type *const array, int const n ) { sort( array, array + n - 1 ); } template static void sort( Type *lower, Type *const upper ) { for ( ; lower <= upper; ++lower ) { Type min = *lower; Type *posn = lower; for ( Type *ptr = lower + 1; ptr <= upper; ++ptr ) { if ( *ptr < min ) { min = *ptr; posn = ptr; } } swap( lower, posn ); } } private: template inline static void swap( Type *const a, Type *const b ) { Type tmp = *a; *a = *b; *b = tmp; } }; } } #endif