|
| template<typename T , size_t N> |
| std::array< T, N > | shuffle (std::array< T, N > arr) |
| |
| template<typename T , size_t N> |
| std::array< T, N > | randomized_bogosort (std::array< T, N > arr) |
| |
| template<typename T > |
| void | insertionSort (T *arr, int n) |
| | Insertion Sort Function. More...
|
| |
| template<typename T > |
| void | insertionSort (std::vector< T > *arr) |
| |
| template<class Iterator > |
| void | merge (Iterator l, Iterator r, const Iterator e, char b[]) |
| | merges 2 sorted adjacent segments into a larger sorted segment More...
|
| |
| template<class Iterator > |
| void | non_recursive_merge_sort (const Iterator first, const Iterator last, const size_t n) |
| | bottom-up merge sort which sorts elements in a non-decreasing order More...
|
| |
| template<class Iterator > |
| void | non_recursive_merge_sort (const Iterator first, const size_t n) |
| | bottom-up merge sort which sorts elements in a non-decreasing order More...
|
| |
| template<class Iterator > |
| void | non_recursive_merge_sort (const Iterator first, const Iterator last) |
| | bottom-up merge sort which sorts elements in a non-decreasing order More...
|
| |
| int | partition (int arr[], int low, int high) |
| |
| void | quickSort (int arr[], int low, int high) |
| |
| template<typename T > |
| void | shell_sort (T *arr, size_t LEN) |
| |
| template<typename T , size_t N> |
| void | shell_sort (T(&arr)[N]) |
| |
| template<typename T > |
| void | shell_sort (std::vector< T > *arr) |
| |
template<class Iterator >
| void sorting::non_recursive_merge_sort |
( |
const Iterator |
first, |
|
|
const Iterator |
last, |
|
|
const size_t |
n |
|
) |
| |
bottom-up merge sort which sorts elements in a non-decreasing order
sorts elements non-recursively by breaking them into small segments, merging adjacent segments into larger sorted segments, then increasing the sizes of segments by factors of 2 and repeating the same process. best-case = worst-case = O(n log(n))
- Parameters
-
| first | points to the first element |
| last | points to 1-step past the last element |
| n | the number of elements |
29 char* buffer =
new char[n *
sizeof(*first)];
33 for (
size_t length(1); length < n; length <<= 1) {
36 for (
size_t counter(n / (length << 1)); counter; --counter) {
37 Iterator
right(left + length),
end(right + length);
38 merge(left, right, end, buffer);
43 if ((n & ((length << 1) - 1)) > length)
44 merge(left, left + length, last, buffer);