Selection Sort - GeeksforGeeks

09 May, 2022
The selection sort algorithm sorts an array by repeatedly finding the minimum element (considering ascending order) from unsorted part and putting it at the beginning. The algorithm maintains two subarrays in a given array.
The subarray which is already sorted. 
Remaining subarray which is unsorted.
In every iteration of selection sort, the minimum element (considering ascending order) from the unsorted subarray is picked and moved to the sorted subarray. 
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.
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.
Second Pass:
For the second position, where 25 is present, again traverse the rest of the array in a sequential manner.
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.
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.
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.
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.
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.
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 next element
Repeat until array is sorted
Below is the implementation of the above approach:
C++
C
Python3
Java
C#
PHP
Javascript
// C++ program for implementation of// selection sort#include <bits/stdc++.h>using namespace std; //Swap functionvoid 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        swap(&arr[min_idx], &arr[i]);    }} //Function to print an arrayvoid printArray(int arr[], int size){    int i;    for (i=0; i < size; i++)        cout << arr[i] << " ";    cout << endl;} // Driver program to test above functionsint 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 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        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 functionsint 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;}
# Python program for implementation of Selection# Sortimport sysA = [64, 25, 12, 22, 11] # Traverse through all array elementsfor 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 aboveprint ("Sorted array")for i in range(len(A)):    print("%d" %A[i],end=" ")
// Java program for implementation of Selection Sortclass 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# program for implementation// of Selection Sortusing 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 program for implementation// of selection sortfunction 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.?>
<script>// Javascript program for implementation of selection sortfunction 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>
Sorted array: 
11 12 22 25 64 
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 variable while swapping two values in Array. The good thing about selection sort is it never makes more than O(n) swaps and can be useful when memory write is a costly operation. 
Stability : The default implementation is not stable. However it can be made stable. Please see stable selection sort for details.
Yes, it does not require extra space. 
YouTubeGeeksforGeeks507K subscribersSelection Sort | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 1:36•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=xWBP4lzkoyM" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
Snapshots: Quiz on Selection SortOther Sorting Algorithms on GeeksforGeeks/GeeksQuiz: Coding practice for sorting
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
DeepikaPathak
RishiAdvani
rathbhupendra
navyab4u247
akshitsaxenaa09
amartyaghoshgfg
kashishkumar2
Medlife
Sorting
Medlife
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Radix Sort
Merge two sorted arrays
Chocolate Distribution Problem
Count Inversions in an array | Set 1 (Using Merge Sort)
Sort an array of 0s, 1s and 2s
k largest(or smallest) elements in an array
sort() in Python
Bucket Sort
Merge Sort for Linked Lists
Python List sort() method