<
typenameT,
size_tN>
37static void InsertionSort(std::array<T, N> *A,
size_tstart,
size_tend) {
41 for(i = start; i < end; i++) {
44 while(j > start && temp < ptr[j - 1]) {
66template<
typenameT,
size_tN>
67static void merge(std::array<T, N> *array,
size_tmin,
size_tmax,
size_tmid) {
68 size_tfirstIndex = min;
69 size_tsecondIndex = mid + 1;
71 autoptr = array->data();
72std::array<T, N + 1> tempArray{0};
75 for(
size_tindex = min; index <= max; index++) {
77 if(firstIndex <= mid &&
78(secondIndex > max || ptr[firstIndex] <= ptr[secondIndex])) {
79tempArray[index] = ptr[firstIndex];
82tempArray[index] = ptr[secondIndex];
88memcpy(ptr + min, tempArray.data() + min, (max - min) *
sizeof(T));
106template<
typenameT,
size_tN>
107void mergeSort(std::array<T, N> *array,
size_tmin,
size_tmax,
110 if((max - min) <= threshold) {
114 size_tmid = (max + min) >> 1;
121 merge(array, min, max, mid);
133 constexpr size_tsize = 30;
134std::array<int, size> array{0};
136 for(
inti = 0; i < size; i++) {
137array[i] = std::rand() % 100 - 50;
138std::cout << array[i] <<
" ";
140std::cout << std::endl;
146 for(
inti = 0; i < size; ++i) {
147std::cout << array[i] <<
" ";
149std::cout << std::endl;
151assert(std::is_sorted(std::begin(array), std::end(array)));
152std::cout <<
"Test passed\n";
160std::srand(std::time(
nullptr));
static void InsertionSort(std::array< T, N > *A, size_t start, size_t end)
Insertion merge algorithm.
void mergeSort(std::array< T, N > *array, size_t min, size_t max, size_t threshold)
Final combined algorithm. Algorithm utilizes sorting::merge_insertion::InsertionSort if window length...
static void test()
Function to test code using random arrays.
int main()
Main function.
static void merge(std::array< T, N > *array, size_t min, size_t max, size_t mid)
Perform merge of data in a window.
Combined Intersion-Merge sorting algorithm.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4