Open-Source Internship opportunity by OpenGenus for programmers. Apply now.

In this article at OpenGenus, we have explained selection sort and implemented a program on the same in C Programming Language.

# Table of contents

- What is Selection sort?
- How selection sort works
- Approach to write the program
- Implementation
- Output
- Time complexity
- Drawbacks of selection sort

# What is Selection sort?

- Selection sort is one of the most simple and easy sorting algorithms.
- It works by first finding the smallest element and swapping it with the first element in the array.
- Then the size of the array is reduced by 1 and the for the rest of the unsorted array step 2 is repeated.
- Step 3 is repeated until the whole array is sorted.

# How selection sort works

- For example if we have the given array

- First we select the element at 0th index and compare it with other elements in the array.
- If an element smaller than the element at 0th index is found, then both of these elements are swapped. In the given example, element at 0th index is 5 and the smallest element of the array is 1, at 2nd index, so we swap these two.

- Orange here represents that elements that are to be swapped.
- Now element 1(element at 0th index) is sorted, so we reduce the array size by 1.
- Now element at 1st index is compared with other elements of the array.

- Here blue represents that, this part of the array is sorted andrest is the unsorted part.
- It is found that element at 1st index, that is 2 is the smallest element among the unsorted part of the array so it is not swapped with any other element and array size is again reduced.
- Now we compare the element at 2nd index with the rest of the unsorted array and it is found that element at 3rd index, that is 3 is smaller than element at 2nd index, that is 5.

- The elements in the orange box(that is the elements 5 and 3) are now swapped.
- Now elements at 3rd index is compared with rest of the unsorted part of the array.
- It is found that element at 5th index is the next smallest element in the unsorted part.

- So these two elements are swapped.
- Now next, element at 4th index is compared with the elements in the rest of the array and since only one element is left, elements at index 4 and 5 are compared.

- Since element at index 5 is less than element at index 4, they are swapped.

- We have gone through the entire array, and now it is sorted.

# Approach to write the program

Following is the approach to solve the problem:

- First we enter the main function.
- Here we declare the array and store the size of the array in variable n.
- Then we call the function
*selectionSort*with the paraments being arr(the name of the array) and n(size of array). - Now control goes to the function
*selectionSort*. - Here we run two loops. Outer one will run from 0 to less than n-1 and the inner one will run from i+1 to less than n and is used to find the smallest element in the array which is stored in variable
*min*, then the function swap is called with the parameters being the address of element at min and j as it is a call by reference program. - Now the two elements are swapped inside the function swap using a third variable.

If element at j is equal to element at*min*, then no swapping occurs. - This continues throughout the length of the array until control reaches the end of the array.
- Once it reaches the end of the array, it means that the elements are now sorted.
- Now the sorted array is stored in a new array in a function
*print*and the new array is printed when the function*print*is called in the main function.

# Implementation

Following is the implemention of the code in C programming language:

```
#include <stdio.h>
void swap(int *p, int *q)
{
int temp = *p;
*p = *q;
*q = temp;
}
void selectionSort(int arr[], int n)
{
int i, j, min;
for (i = 0; i < n-1; i++)
{
min= i;
for (j = i+1; j < n; j++)
if (arr[j] < arr[min])
min= j;
if(min!= i)
swap(&arr[min], &arr[i]);
}
}
void print(int arr[], int size)
{
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main()
{
int arr[] = {5,2,1,3,6,4};
int n = sizeof(arr)/sizeof(arr[0]);
selectionSort(arr, n);
printf("Sorted array: \n");
print(arr, n);
return 0;
}
```

# Output

Run the code as follows:

gcc code.c

./a.out

```
Following is the output of the program:
Sorted array:
1 2 3 4 5 6
```

# Time complexity

- Since there are two nested loops, each one's time complexity being O(N), the overall time complexity is O(N)* O(N)=
**O(N^2)**

# Drawbacks of selection sort

- Having a time complexity of O(N^2) in both best and worst case makes it unsuitable for large datasets/arrays.
- It cannot take the advantage of array being fully/ partially sorted as it will always check the entire array.