Selection Sort using Standard Template Libraries (not C++ 11):

Selection sort works by finding smallest element from the list unsorted list, swap with leftmost element and proceed until all the elements are in order.

Selecting the lowest element requires scanning all n elements (this takes n − 1 comparisons) and then swapping it into the first position. Finding the next lowest element requires scanning the remaining n − 1 elements and so on. Hence the complexity is O(N^2).

The C++ implementation is like below:

#include < iostream >

#include < algorithm >

#include < vector >

template < class ForwardIterator1, class ForwardIterator2 >

void iters_swap (ForwardIterator1 a, ForwardIterator2 b)

{

std::swap (*a, *b);

}

template < typename T >

void selectionSort(T &v)

{

// Selection sort

std::vector::iterator it = v.begin();

while(it != v.end())

{

std::vector::iterator i_Min = std::min_element(it, v.end());

iters_swap(i_Min, it);

++it;

}

}

int main()

{

int arr[] = {34, 20, 99, 10, 23};

std::vector v(std::begin(arr), std::end(arr));

// Before sorting

for (std::vector::const_iterator i = v.begin(); i != v.end(); ++i)

{

std::cout << *i << ' ';

}

std::cout << std::endl;

selectionSort(v);

// After sorting

for (std::vector::const_iterator iSort = v.begin(); iSort != v.end(); ++iSort)

{

std::cout << *iSort << ' ';

}

std::cout << std::endl;

return 0;

}

1. Using std::min_element() to get smallest element from vector.

2. Then swapping with leftmost one as required

3. Continuing till rightmost boundary is reached for vector.

Selection sort works by finding smallest element from the list unsorted list, swap with leftmost element and proceed until all the elements are in order.

Selecting the lowest element requires scanning all n elements (this takes n − 1 comparisons) and then swapping it into the first position. Finding the next lowest element requires scanning the remaining n − 1 elements and so on. Hence the complexity is O(N^2).

The C++ implementation is like below:

#include < iostream >

#include < algorithm >

#include < vector >

template < class ForwardIterator1, class ForwardIterator2 >

void iters_swap (ForwardIterator1 a, ForwardIterator2 b)

{

std::swap (*a, *b);

}

template < typename T >

void selectionSort(T &v)

{

// Selection sort

std::vector

while(it != v.end())

{

std::vector

iters_swap(i_Min, it);

++it;

}

}

int main()

{

int arr[] = {34, 20, 99, 10, 23};

std::vector

// Before sorting

for (std::vector

{

std::cout << *i << ' ';

}

std::cout << std::endl;

selectionSort(v);

// After sorting

for (std::vector

{

std::cout << *iSort << ' ';

}

std::cout << std::endl;

return 0;

}

1. Using std::min_element() to get smallest element from vector.

2. Then swapping with leftmost one as required

3. Continuing till rightmost boundary is reached for vector.

## Comments