Open In App

Selection Sort Algorithm

Last Updated : 16 Feb, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Selection sort is a simple and efficient sorting algorithm that works by repeatedly selecting the smallest (or largest) element from the unsorted portion of the list and moving it to the sorted portion of the list. The algorithm repeatedly selects the smallest (or largest) element from the unsorted portion of the list and swaps it with the first element of the unsorted portion. This process is repeated for the remaining unsorted portion of the list until the entire list is sorted. One variation of selection sort is called “Bidirectional selection sort” that goes through the list of elements by alternating between the smallest and largest element, this way the algorithm can be faster in some cases.

The algorithm maintains two subarrays in a given array.

  • The subarray which already sorted. 
  • The remaining subarray was unsorted.

In every iteration of the selection sort, the minimum element (considering ascending order) from the unsorted subarray is picked and moved to the beginning of unsorted subarray. 

After every iteration sorted subarray size increase by one and unsorted subarray size decrease by one.

After N (size of array) iteration we will get sorted array.

Flowchart of the Selection Sort: 

Selection-Sort-Flowhchart
How selection sort works?

Lets consider the following array as an example: arr[] = {64, 25, 12, 22, 11}

First pass:

  • For the first position in the sorted array, the whole array is traversed from index 0 to 4 sequentially. The first position where 64 is stored presently, after traversing whole array it is clear that 11 is the lowest value.
   64       25       12       22       11   
  • Thus, replace 64 with 11. After one iteration 11, which happens to be the least value in the array, tends to appear in the first position of the sorted list.
   11       25       12       22       64   

Second Pass:

  • For the second position, where 25 is present, again traverse the rest of the array in a sequential manner.
   11       25       12       22       64   
  • After traversing, we found that 12 is the second lowest value in the array and it should appear at the second place in the array, thus swap these values.
   11       12       25       22       64   

Third Pass:

  • Now, for third place, where 25 is present again traverse the rest of the array and find the third least value present in the array.
   11       12       25       22       64   
  • While traversing, 22 came out to be the third least value and it should appear at the third place in the array, thus swap 22 with element present at third position.
   11       12       22       25       64   

Fourth pass:

  • Similarly, for fourth position traverse the rest of the array and find the fourth least element in the array 
  • As 25 is the 4th lowest value hence, it will place at the fourth position.
   11       12       22       25       64   

Fifth Pass:

  • At last the largest value present in the array automatically get placed at the last position in the array
  • The resulted array is the sorted array.
   11       12       22       25       64   
Recommended Practice

Follow the below steps to solve the problem:

  • Initialize minimum value(min_idx) to location 0.
  • Traverse the array to find the minimum element in the array.
  • While traversing if any element smaller than min_idx is found then swap both the values.
  • Then, increment min_idx to point to the next element.
  • Repeat until the array is sorted.
 

Below is the implementation of the above approach:

C++




// C++ program for implementation of 
// selection sort 
#include <bits/stdc++.h>
using namespace std;
  
//Swap function
void swap(int *xp, int *yp) 
    int temp = *xp; 
    *xp = *yp; 
    *yp = temp; 
  
void selectionSort(int arr[], int n) 
    int i, j, min_idx; 
    // One by one move boundary of 
    // unsorted subarray 
    for (i = 0; i < n-1; i++)
    {
        // Find the minimum element in 
        // unsorted array 
        min_idx = i; 
        for (j = i+1; j < n; j++)
        {
          if (arr[j] < arr[min_idx]) 
              min_idx = j;
        }
        // Swap the found minimum element 
        // with the first element 
        if (min_idx!=i)
            swap(&arr[min_idx], &arr[i]);
    }
  
//Function to print an array
void printArray(int arr[], int size) 
    int i; 
    for (i=0; i < size; i++)
    {
      cout << arr[i] << " "
      cout << endl;
    }
  
// Driver program to test above functions 
int main() 
    int arr[] = {64, 25, 12, 22, 11}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
    selectionSort(arr, n); 
    cout << "Sorted array: \n"
    printArray(arr, n); 
    return 0; 
// This is code is contributed by rathbhupendra


C




// C program for implementation of selection sort
#include <stdio.h>
  
void swap(int *xp, int *yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}
  
void selectionSort(int arr[], int n)
{
    int i, j, min_idx;
  
    // One by one move boundary of unsorted subarray
    for (i = 0; i < n-1; i++)
    {
        // Find the minimum element in unsorted array
        min_idx = i;
        for (j = i+1; j < n; j++)
          if (arr[j] < arr[min_idx])
            min_idx = j;
  
        // Swap the found minimum element with the first element
           if(min_idx != i)
            swap(&arr[min_idx], &arr[i]);
    }
}
  
/* Function to print an array */
void printArray(int arr[], int size)
{
    int i;
    for (i=0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}
  
// Driver program to test above functions
int main()
{
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr)/sizeof(arr[0]);
    selectionSort(arr, n);
    printf("Sorted array: \n");
    printArray(arr, n);
    return 0;
}


Python3




# Python program for implementation of Selection
# Sort
import sys
A = [64, 25, 12, 22, 11]
  
# Traverse through all array elements
for i in range(len(A)):
      
    # Find the minimum element in remaining 
    # unsorted array
    min_idx = i
    for j in range(i+1, len(A)):
        if A[min_idx] > A[j]:
            min_idx = j
              
    # Swap the found minimum element with 
    # the first element        
    A[i], A[min_idx] = A[min_idx], A[i]
  
# Driver code to test above
print ("Sorted array")
for i in range(len(A)):
    print("%d" %A[i],end=" "


Java




// Java program for implementation of Selection Sort
import java.io.*;
public class SelectionSort
{
    void sort(int arr[])
    {
        int n = arr.length;
  
        // One by one move boundary of unsorted subarray
        for (int i = 0; i < n-1; i++)
        {
            // Find the minimum element in unsorted array
            int min_idx = i;
            for (int j = i+1; j < n; j++)
                if (arr[j] < arr[min_idx])
                    min_idx = j;
  
            // Swap the found minimum element with the first
            // element
            int temp = arr[min_idx];
            arr[min_idx] = arr[i];
            arr[i] = temp;
        }
    }
  
    // Prints the array
    void printArray(int arr[])
    {
        int n = arr.length;
        for (int i=0; i<n; ++i)
            System.out.print(arr[i]+" ");
        System.out.println();
    }
  
    // Driver code to test above
    public static void main(String args[])
    {
        SelectionSort ob = new SelectionSort();
        int arr[] = {64,25,12,22,11};
        ob.sort(arr);
        System.out.println("Sorted array");
        ob.printArray(arr);
    }
}
/* This code is contributed by Rajat Mishra*/


C#




// C# program for implementation 
// of Selection Sort
using System;
  
class GFG
    static void sort(int []arr)
    {
        int n = arr.Length;
  
        // One by one move boundary of unsorted subarray
        for (int i = 0; i < n - 1; i++)
        {
            // Find the minimum element in unsorted array
            int min_idx = i;
            for (int j = i + 1; j < n; j++)
                if (arr[j] < arr[min_idx])
                    min_idx = j;
  
            // Swap the found minimum element with the first
            // element
            int temp = arr[min_idx];
            arr[min_idx] = arr[i];
            arr[i] = temp;
        }
    }
  
    // Prints the array
    static void printArray(int []arr)
    {
        int n = arr.Length;
        for (int i=0; i<n; ++i)
            Console.Write(arr[i]+" ");
        Console.WriteLine();
    }
  
    // Driver code 
    public static void Main()
    {
        int []arr = {64,25,12,22,11};
        sort(arr);
        Console.WriteLine("Sorted array");
        printArray(arr);
    }
  
}
// This code is contributed by Sam007


PHP




<?php
// PHP program for implementation 
// of selection sort 
function selection_sort(&$arr, $n
{
    for($i = 0; $i < $n ; $i++)
    {
        $low = $i;
        for($j = $i + 1; $j < $n ; $j++)
        {
            if ($arr[$j] < $arr[$low])
            {
                $low = $j;
            }
        }
          
        // swap the minimum value to $ith node
        if ($arr[$i] > $arr[$low])
        {
            $tmp = $arr[$i];
            $arr[$i] = $arr[$low];
            $arr[$low] = $tmp;
        }
    }
}
  
// Driver Code
$arr = array(64, 25, 12, 22, 11);
$len = count($arr);
selection_sort($arr, $len);
echo "Sorted array : \n"
  
for ($i = 0; $i < $len; $i++) 
    echo $arr[$i] . " "
  
// This code is contributed 
// by Deepika Gupta. 
?> 


Javascript




<script>
// Javascript program for implementation of selection sort
function swap(arr,xp, yp)
{
    var temp = arr[xp];
    arr[xp] = arr[yp];
    arr[yp] = temp;
}
  
function selectionSort(arr,  n)
{
    var i, j, min_idx;
  
    // One by one move boundary of unsorted subarray
    for (i = 0; i < n-1; i++)
    {
        // Find the minimum element in unsorted array
        min_idx = i;
        for (j = i + 1; j < n; j++)
        if (arr[j] < arr[min_idx])
            min_idx = j;
  
        // Swap the found minimum element with the first element
        swap(arr,min_idx, i);
    }
}
  
function printArray( arr,  size)
{
    var i;
    for (i = 0; i < size; i++)
        document.write(arr[i] + " ");
    document.write(" <br>");
}
  
var arr = [64, 25, 12, 22, 11];
    var n = 5;
    selectionSort(arr, n);
    document.write("Sorted array: <br>");
    printArray(arr, n);
  
// This code is contributed by akshitsaxenaa09.
</script>


Output

Sorted array: 
11 12 22 25 64 

Complexity Analysis of Selection Sort:

Time Complexity: The time complexity of Selection Sort is O(N2) as there are two nested loops:

  • One loop to select an element of Array one by one = O(N)
  • Another loop to compare that element with every other Array element = O(N)

Therefore overall complexity = O(N) * O(N) = O(N*N) = O(N2)

Auxiliary Space: O(1) as the only extra memory used is for temporary variables while swapping two values in Array. The selection sort never makes more than O(N) swaps and can be useful when memory write is a costly operation. 

Sort an array of strings using Selection Sort

Is Selection Sort Algorithm stable?

Stability: The default implementation is not stable. However, it can be made stable. Please see stable selection sort for details.

Is Selection Sort Algorithm in place?

Yes, it does not require extra space.

Snapshots: Quiz on Selection Sort
Other Sorting Algorithms on GeeksforGeeks/GeeksQuiz: Coding practice for sorting

Advantages of Selection Sort Algorithm:

  • Simple and easy to understand.
  • Preserves the relative order of items with equal keys which means it is stable.
  • Works well with small datasets.
  • It is adaptable to various types of data types.
  • Selection sort is an in-place sorting algorithm, which means it does not require any additional memory to sort the list.
  • It has a best-case and average-case time complexity of O(n^2), making it efficient for small data sets.
  • It is easy to modify to sort in ascending or descending order.
  • It can be easily implemented in hardware, making it suitable for real-time applications.
  • It can also be used as a subroutine in more efficient sorting algorithms.
  • It does not require any special memory or auxiliary data structures, making it a lightweight solution.
  • The algorithm can be easily paralleled, allowing for efficient sorting on multi-core processors.
  • It can be used in limited memory environments as it requires minimum extra memory.
  • It is easy to understand, making it a popular choice for teaching purposes.
  • It is suitable for sorting data with few unique keys, as it performs well in such scenarios.

Disadvantages of Selection Sort Algorithm:

  • Selection sort has a time complexity of O(n^2) in the worst and average case.
  • Does not works well on large datasets.
  • Selection sort algorithm needs to iterate over the list multiple times, thus it can lead to an unbalanced branch.
  • Selection sort has poor cache performance and hence it is not cache friendly. 
  • Not adaptive, meaning it doesn’t take advantage of the fact that the list may already be sorted or partially sorted
  • Not a good choice for large data sets with slow random access memory (RAM)
  • It’s not a comparison sort and doesn’t have any performance guarantees like merge sort or quick sort.
  • It has poor cache performance
  • It can cause poor branch prediction due to its high branch misprediction rate
  • It has a high number of write operations, leading to poor performance on systems with slow storage.
  • It is not a parallelizable algorithm, meaning that it cannot be easily split up to be run on multiple processors or cores.
  • It does not handle data with many duplicates well, as it makes many unnecessary swaps.
  • It can be outperformed by other algorithms such as quicksort and heapsort in most cases. 

Summary:

  • Selection sort is a simple and easy-to-understand sorting algorithm that works by repeatedly selecting the smallest (or largest) element from the unsorted portion of the list and moving it to the sorted portion of the list. 
  • This process is repeated for the remaining unsorted portion of the list until the entire list is sorted.
  • It has a time complexity of O(n^2) in the worst and average case which makes it less efficient for large data sets.
  • Selection sort is a stable sorting algorithm.
  • It can be used to sort different types of data.
  • It has specific applications where it is useful such as small data sets and memory-constrained systems.

Please write comments if you find anything incorrect, or if you want to share more information about the topic discussed above 


My Personal Notes arrow_drop_up

Next Article

Similar Reads

Comparison among Bubble Sort, Selection Sort and Insertion Sort
Bubble Sort, Selection Sort, and Insertion Sort are simple sorting algorithms that are commonly used to sort small datasets or as building blocks for more complex sorting algorithms. Here's a comparison of the three algorithms: Bubble Sort:Time complexity: O(n^2) in the worst and average cases, O(n) in the best case (when the input array is already
15 min read
A sorting algorithm that slightly improves on selection sort
As we know, selection sort algorithm takes the minimum on every pass on the array, and place it at its correct position.The idea is to take also the maximum on every pass and place it at its correct position. So in every pass, we keep track of both maximum and minimum and array becomes sorted from both ends. Examples: First example: 7 8 5 4 9 2 Inp
6 min read
Selection Sort VS Bubble Sort
Not a valid contributionIn this, we will cover the comparison between Selection Sort VS Bubble Sort. The resources required by Selection Sort &amp; Bubble Sort algorithms on the basis of Time and Space Complexity are as follows. Time Complexity - [Tex]O(n^2)[/Tex]Space Complexity - [Tex]O(1)[/Tex] Let’s dive deep into the working of these algorithm
13 min read
Program to sort an array of strings using Selection Sort
Given an array of strings, sort the array using Selection Sort. Examples: Input : paper true soap floppy flower Output : floppy, flower, paper, soap, true Prerequisite : Selection Sort. C/C++ Code // C++ program to implement selection sort for // array of strings. #include &lt;bits/stdc++.h&gt; #include &lt;string.h&gt; using namespace std; #define
7 min read
Is Selection Sort a Simple Sort?
Selection sort is a simple sorting algorithm that works by repeatedly finding the minimum element from the unsorted portion of the list and swapping it with the leftmost unsorted element. This process is repeated until the entire list is sorted. How Selection Sort Works?Selection sort works as follows: Start with the first unsorted element in the l
2 min read
8086 program for selection sort
Problem - Write an assembly language program in 8086 microprocessor to sort a given array of n numbers using Selection Sort. Assumptions - The number of elements in the array is stored at offset 500. The array starts from offset 501. Example - Algorithm - We first find the smallest number in the array. Swap the smallest number from the first elemen
3 min read
Iterative selection sort for linked list
Given a linked list, the task is to sort the linked list in ascending order by using selection sort.Examples: Input : 1-&gt;4-&gt;2-&gt;2-&gt;3 Output : 1-&gt;2-&gt;2-&gt;3-&gt;4 Input : 5-&gt;4-&gt;3-&gt;2 Output : 2-&gt;3-&gt;4-&gt;5 Selection Sort Algorithm: Iterate the given list N times where N is the number of elements in the list. In every i
15+ min read
Selection Sort Visualizer in JavaScript
Selection sort is the simplest sorting algorithm that works by repeatedly finding the minimum element (considering ascending order) from the unsorted part and putting it at the beginning. In order to know more about it. Please refer to Selection Sort An algorithm like Selection Sort can be easily understood by visualizing instead of long codes. In
5 min read
Javascript Program For Recursive Selection Sort For Singly Linked List - Swapping Node Links
Given a singly linked list containing n nodes. The problem is to sort the list using the recursive selection sort technique. The approach should be such that it involves swapping node links instead of swapping node data. Examples: Input: 10 -&gt; 12 -&gt; 8 -&gt; 4 -&gt; 6 Output: 4 -&gt; 6 -&gt; 8 -&gt; 10 -&gt; 12 In Selection Sort, we first find
4 min read
Time and Space complexity analysis of Selection Sort
The Selection sort algorithm has a time complexity of O(n^2) and a space complexity of O(1) since it does not require any additional memory space apart from a temporary variable used for swapping. Time Complexity Analysis of Selection Sort:Best-case: O(n2), best case occurs when the array is already sorted. (where n is the number of integers in an
2 min read
Article Tags :
Practice Tags :
three90RightbarBannerImg