Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
selection_sort_recursive.cpp File Reference

Implementation of the Selection sort implementation using recursion. More...

#include <algorithm>
#include <cassert>
#include <iostream>
#include <vector>
Include dependency graph for selection_sort_recursive.cpp:

Namespaces

namespace  sorting
 Sorting algorithms.
 
namespace  selection_sort_recursive
 Functions for the Selection sort implementation using recursion.
 

Functions

template<typename T >
uint64_t sorting::selection_sort_recursive::findMinIndex (const std::vector< T > &in_arr, uint64_t current_position=0)
 The main function finds the index of the minimum element. More...
 
template<typename T >
void sorting::selection_sort_recursive::selectionSortRecursive (std::vector< T > &in_arr, uint64_t current_position=0)
 The main function implements Selection sort. More...
 
static void test ()
 Self-test implementations. More...
 
int main ()
 Main function. More...
 

Detailed Description

Implementation of the Selection sort implementation using recursion.

The selection sort algorithm divides the input list into two parts: a sorted sublist of items which is built up from left to right at the front (left) of the list, and a sublist of the remaining unsorted items that occupy the rest of the list. Initially, the sorted sublist is empty, and the unsorted sublist is the entire input list. The algorithm proceeds by finding the smallest (or largest, depending on the sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order), and moving the sublist boundaries one element to the right.

Implementation

FindMinIndex This function finds the minimum element of the array(list) recursively by simply comparing the minimum element of array reduced size by 1 and compares it to the last element of the array to find the minimum of the whole array.

SelectionSortRecursive Just like selection sort, it divides the list into two parts (i.e.: sorted and unsorted) and finds the minimum of the unsorted array. By calling the FindMinIndex function, it swaps the minimum element with the first element of the list, and then solves recursively for the remaining unsorted list.

Author
Tushar Khanduri

Function Documentation

◆ findMinIndex()

template<typename T >
uint64_t sorting::selection_sort_recursive::findMinIndex ( const std::vector< T > &  in_arr,
uint64_t  current_position = 0 
)

The main function finds the index of the minimum element.

Template Parameters
Ttype of array
Parameters
in_arrarray whose minimum element is to be returned
current_positionposition/index from where the in_arr starts
Returns
index of the minimum element
55 {
56 if (current_position + 1 == in_arr.size()) {
57 return current_position;
58 }
59 uint64_t answer = findMinIndex(in_arr, current_position + 1);
60 if (in_arr[current_position] < in_arr[answer]) {
61 answer = current_position;
62 }
63 return answer;
64}
uint64_t findMinIndex(const std::vector< T > &in_arr, uint64_t current_position=0)
The main function finds the index of the minimum element.
Definition: selection_sort_recursive.cpp:55
T size(T... args)
Here is the call graph for this function:

◆ main()

int main ( void  )

Main function.

Returns
0 on exit
128 {
129 test(); // run self-test implementations
130 return 0;
131}
static void test()
Self-test implementations.
Definition: selection_sort_recursive.cpp:93
Here is the call graph for this function:

◆ selectionSortRecursive()

template<typename T >
void sorting::selection_sort_recursive::selectionSortRecursive ( std::vector< T > &  in_arr,
uint64_t  current_position = 0 
)

The main function implements Selection sort.

Template Parameters
Ttype of array
Parameters
in_arrarray to be sorted,
current_positionposition/index from where the in_arr starts
Returns
void
75 {
76 if (current_position == in_arr.size()) {
77 return;
78 }
79 uint64_t min_element_idx =
80 selection_sort_recursive::findMinIndex(in_arr, current_position);
81 if (min_element_idx != current_position) {
82 std::swap(in_arr[min_element_idx], in_arr[current_position]);
83 }
84 selectionSortRecursive(in_arr, current_position + 1);
85}
void selectionSortRecursive(std::vector< T > &in_arr, uint64_t current_position=0)
The main function implements Selection sort.
Definition: selection_sort_recursive.cpp:74
T swap(T... args)
Here is the call graph for this function:

◆ test()

static void test ( )
static

Self-test implementations.

Returns
void
93 {
94 // 1st test
95 // [1, 0, 2, 1] return [0, 1, 1, 2]
96 std::vector<uint64_t> array1 = {0, 1, 1, 2};
97 std::cout << "1st test... ";
99 assert(std::is_sorted(std::begin(array1), std::end(array1)));
100 std::cout << "passed" << std::endl;
101 // 2nd test
102 // [1, 0, 0, 1, 1, 0, 2, 1] return [0, 0, 0, 1, 1, 1, 1, 2]
103 std::vector<uint64_t> array2 = {1, 0, 0, 1, 1, 0, 2, 1};
104 std::cout << "2nd test... ";
106 assert(std::is_sorted(std::begin(array2), std::end(array2)));
107 std::cout << "passed" << std::endl;
108 // 3rd test
109 // [1, 1, 0, 0, 1, 2, 2, 0, 2, 1] return [0, 0, 0, 1, 1, 1, 1, 2, 2, 2]
110 std::vector<uint64_t> array3 = {1, 1, 0, 0, 1, 2, 2, 0, 2, 1};
111 std::cout << "3rd test... ";
113 assert(std::is_sorted(std::begin(array3), std::end(array3)));
114 std::cout << "passed" << std::endl;
115 // 4th test
116 // [2, 2, 2, 0, 0, 1, 1] return [0, 0, 1, 1, 2, 2, 2]
117 std::vector<uint64_t> array4 = {2, 2, 2, 0, 0, 1, 1};
118 std::cout << "4th test... ";
120 assert(std::is_sorted(std::begin(array4), std::end(array4)));
121 std::cout << "passed" << std::endl;
122}
T begin(T... args)
T end(T... args)
T endl(T... args)
T is_sorted(T... args)
Here is the call graph for this function: