# How does a selection sort work for an array?

A suitable example.

Last updated:9/11/2019 12:52:04 AM ##### Anonymous User

This selection sort is a fairly intuitive sorting algorithm, though not necessarily efficient. Into this process, the smallest element is first located and switched with the element at subscript zero, thereby placing the smallest element in the first position.

The smallest element remaining in the subarray is then located next to subscripts 1 through n-1 and switched with the element at subscript 1, thereby placing the second smallest element in the second position. The steps are repeated in the same manner till the last element.

OR

The Selection sort is conceptually the simplest sorting algorithm. These algorithms will find first the smallest element in the array and swap it with the element in the first position, then it will find the second smallest element and exchange it with second position's element in that series, and It will keep doing this until the entire table is sorted. This is called selection sort because it repeatedly selects the next-smallest element and swaps it into the right place.

```Algorithm for selection sort

selectionSort(array, size)
repeat (size - 1) times
set the first unsorted element as the minimum
for each of the unsorted elements
if element < currentMinimum
set element as new minimum
swap minimum with first unsorted position
end selectionSort
```

Example (1).

```#include <stdio.h>
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void selectionSort(int array[], int size)
{
for (int step = 0; step < size - 1; step++)
{
int min_idx = step;
for (int i = step + 1; i < size; i++)
{
if (array[i] < array[min_idx])
min_idx = i;
}
swap(&array[min_idx], &array[step]);
}
}
void printArray(int array[], int size)
{
for (int i = 0; i < size; ++i)
{
printf('%d  ', array[i]);
}
printf('\n');
}
int main()
{
int data[] = {20, 12, 10, 15, 2};
int size = sizeof(data) / sizeof(data);
selectionSort(data, size);
printf('Sorted array in Acsending Order:\n');
printArray(data, size);
}
```