Program Listing for File RadixSort.h

↰ Return to documentation for file (ADS/sort/RadixSort.h)

/*--------------------------------------------------------------------------*/
/*---------------------------- File RadixSort.h ----------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

#ifndef __ADS_RadixSort
 #define __ADS_RadixSort
                      /* self-identification: #endif constant */

/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/

#include "ADS/Contract.h"
#include "ADS/sort/InsertionSort.h"
#include "ADS/sort/Sorted.h"

#include <algorithm>
#include <array>
#include <bit>
#include <concepts>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <memory>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>

/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/

namespace ADS {

template< class T >
concept RadixKey = ( std::is_integral_v< T > ||
                     std::is_floating_point_v< T > ) && ( sizeof( T ) <= 8 );

template< RadixKey T >
[[nodiscard]] auto radixKey( T x );

template< RadixKey T >
void radixSort( std::vector< T > & A );

template< class T , class K >
void radixSortBy( std::vector< T > & A , K key );

template< RadixKey T >
void americanFlagSort( std::vector< T > & A );

inline void msdRadixSort( std::vector< std::string > & A );

template< std::floating_point T >
void bucketSort( std::vector< T > & A );

/*--------------------------------------------------------------------------*/

}  // end( namespace ADS )

/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/

#include "ADS/sort/impl/RadixSort.tpp"

/*--------------------------------------------------------------------------*/

#endif  /* RadixSort.h included */

/*--------------------------------------------------------------------------*/
/*-------------------------- End File RadixSort.h --------------------------*/
/*--------------------------------------------------------------------------*/