|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Typedefs | |
| template<typename IntT > | |
| using | counting_unsigned_t = std::make_unsigned_t< std::remove_cv_t< IntT > > |
| Unsigned counterpart used to measure counting-sort key ranges. | |
| template<typename IntT > | |
| using | radix_unsigned_t = std::make_unsigned_t< std::remove_cv_t< IntT > > |
| Unsigned key type used by radix sort passes. | |
Functions | |
| template<typename IntT > | |
| size_t | counting_bucket_count (const IntT min_key, const IntT max_key) |
| Compute the number of buckets required for a counting sort range. | |
| template<typename IntT > | |
| size_t | counting_bucket (const IntT value, const IntT min_key) noexcept |
| Map a value to its bucket index in counting sort. | |
| template<typename IntT > | |
| IntT | counting_value_from_bucket (const size_t bucket, const IntT min_key) noexcept |
| Retrieve the original value from a bucket index in counting sort. | |
| template<template< typename > class C, typename IntT > requires IntegerSortableValue<IntT> | |
| void | counting_sort_impl (C< IntT > &a) |
| Internal implementation of counting sort for containers. | |
| template<typename IntT > requires IntegerSortableValue<IntT> | |
| void | counting_sort_impl (IntT *a, const size_t n) |
| Internal implementation of counting sort for raw pointer ranges. | |
| template<typename IntT > requires IntegerSortableValue<IntT> | |
| void | counting_sort_impl (DynList< IntT > &list) |
Internal counting-sort implementation for DynList. | |
| template<typename IntT > requires IntegerSortableValue<IntT> | |
| void | counting_sort_impl (DynDlist< IntT > &list) |
Internal counting-sort implementation for DynDlist. | |
| template<typename IntT > | |
| constexpr radix_unsigned_t< IntT > | radix_key (const IntT value) noexcept |
| Map an integer value to an unsigned radix key. | |
| template<template< typename > class C, typename IntT > requires IntegerSortableValue<IntT> | |
| void | radix_sort_impl (C< IntT > &a) |
| Internal radix-sort implementation for array-like containers. | |
| template<typename IntT > requires IntegerSortableValue<IntT> | |
| void | radix_sort_impl (IntT *a, const size_t n) |
| Core radix sort implementation for raw pointer ranges. | |
| template<typename IntT > requires IntegerSortableValue<IntT> | |
| void | radix_sort_impl (DynList< IntT > &list) |
| LSD radix sort implementation for DynList. | |
| template<typename IntT > requires IntegerSortableValue<IntT> | |
| void | radix_sort_impl (DynDlist< IntT > &list) |
| LSD radix sort implementation for DynDlist. | |
| using Aleph::sort_utils_detail::counting_unsigned_t = typedef std::make_unsigned_t<std::remove_cv_t<IntT> > |
Unsigned counterpart used to measure counting-sort key ranges.
The cv-qualifiers are removed before mapping to the corresponding unsigned integer type. This lets the range arithmetic work uniformly for signed and unsigned integral keys.
| IntT | Integral key type. |
Definition at line 4673 of file tpl_sort_utils.H.
| using Aleph::sort_utils_detail::radix_unsigned_t = typedef std::make_unsigned_t<std::remove_cv_t<IntT> > |
Unsigned key type used by radix sort passes.
Radix sort works on unsigned byte digits. Signed values are first mapped to this unsigned type with radix_key() so their natural signed order is preserved.
| IntT | Integral value type. |
Definition at line 4684 of file tpl_sort_utils.H.
|
inlinenoexcept |
Map a value to its bucket index in counting sort.
| IntT | Integer type. |
| value | Value to map. |
| min_key | Minimum key in the range. |
Definition at line 4721 of file tpl_sort_utils.H.
References value.
Referenced by counting_sort_impl(), counting_sort_impl(), counting_sort_impl(), and counting_sort_impl().
Compute the number of buckets required for a counting sort range.
| IntT | Integer type. |
| min_key | Minimum value in the range. |
| max_key | Maximum value in the range. |
| ah_domain_error | if max_key < min_key. |
| ah_runtime_error | if the range exceeds size_t capacity. |
Definition at line 4696 of file tpl_sort_utils.H.
References ah_domain_error_if, ah_runtime_error_unless, and Aleph::blossom_maximum_cardinality_matching().
Referenced by counting_sort_impl(), counting_sort_impl(), counting_sort_impl(), and counting_sort_impl().
Internal implementation of counting sort for containers.
| C | Container template type. |
| IntT | Integer type. |
| [in,out] | a | Container to sort. |
Definition at line 4749 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::count(), counting_bucket(), counting_bucket_count(), Aleph::Array< T >::create(), and k.
Referenced by Aleph::counting_sort(), Aleph::counting_sort(), Aleph::counting_sort(), Aleph::counting_sort(), and Aleph::counting_sort().
Internal counting-sort implementation for DynDlist.
Rewrites node values in sorted order without reallocating or relinking the doubly-linked list nodes.
| IntT | Integer type accepted by CountingSortable. |
| [in,out] | list | List whose values are sorted in place. |
Definition at line 4895 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::count(), counting_bucket(), counting_bucket_count(), counting_value_from_bucket(), Aleph::Array< T >::create(), Aleph::DynDlist< T >::Iterator::get_curr_ne(), Aleph::Dlink::Iterator::has_curr(), k, Aleph::DynDlist< T >::Iterator::next_ne(), out, Aleph::DynDlist< T >::size(), and value.
Internal counting-sort implementation for DynList.
Rewrites node values in sorted order without reallocating or relinking the list nodes.
| IntT | Integer type accepted by CountingSortable. |
| [in,out] | list | List whose values are sorted in place. |
Definition at line 4843 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::count(), counting_bucket(), counting_bucket_count(), counting_value_from_bucket(), Aleph::Array< T >::create(), Aleph::DynList< T >::Iterator::get_curr_ne(), Aleph::HTList::Iterator::has_curr(), k, Aleph::HTList::Iterator::next_ne(), out, Aleph::HTList::size(), and value.
Internal implementation of counting sort for raw pointer ranges.
Sorts a[0..n) in nondecreasing order using a stable counting-sort pass over the observed value range.
| IntT | Integer type accepted by CountingSortable. |
| [in,out] | a | Pointer to the first element in the range. |
| [in] | n | Number of elements in the range. |
Definition at line 4797 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::count(), counting_bucket(), counting_bucket_count(), Aleph::Array< T >::create(), and k.
|
inlinenoexcept |
Retrieve the original value from a bucket index in counting sort.
| IntT | Integer type. |
| bucket | Bucket index. |
| min_key | Minimum key in the range. |
Definition at line 4735 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching().
Referenced by counting_sort_impl(), and counting_sort_impl().
|
constexprnoexcept |
Map an integer value to an unsigned radix key.
Unsigned values are returned unchanged. Signed values are biased by flipping the sign bit, which makes their unsigned byte order match the natural signed order required by radix sort.
| IntT | Integer type. |
| value | Value to map. |
Definition at line 4948 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching(), and value.
Internal radix-sort implementation for array-like containers.
Performs a stable least-significant-byte radix sort using a fixed 256-bucket counting pass for each byte of the unsigned radix key.
| C | Aleph array-like container template. |
| IntT | Integer type accepted by RadixSortable. |
| [in,out] | a | Container sorted in place. |
Definition at line 4968 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::count(), and Aleph::Array< T >::create().
Referenced by Aleph::radix_sort(), Aleph::radix_sort(), Aleph::radix_sort(), Aleph::radix_sort(), and Aleph::radix_sort().
LSD radix sort implementation for DynDlist.
Performs a stable radix sort on a doubly-linked list.
| IntT | Integer type. |
| [in,out] | list | The doubly-linked list to sort. |
Definition at line 5104 of file tpl_sort_utils.H.
References Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Dnode< T >::get_data(), Aleph::Dnode< T >::remove_first_ne(), Aleph::Array< T >::reserve(), and Aleph::DynDlist< T >::size().
LSD radix sort implementation for DynList.
Performs a stable radix sort on a linked list. This implementation is memory efficient as it reuses the original list nodes.
| IntT | Integer type. |
| [in,out] | list | The list to sort. |
Definition at line 5065 of file tpl_sort_utils.H.
References Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::HTList::is_empty(), Aleph::Array< T >::reserve(), and Aleph::HTList::size().
Core radix sort implementation for raw pointer ranges.
Uses counting sort as a stable subroutine to sort by each byte digit.
| IntT | Integer type. |
| [in,out] | a | Pointer to the array. |
| [in] | n | Number of elements. |
Definition at line 5017 of file tpl_sort_utils.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::count(), and Aleph::Array< T >::create().