Selection Sort Algorithm Implemented in Python, Java, and C/C++

Select Sort Featured Image

The Selection Sort Algorithm sorts the elements of an array. In this article, we shall look at the core algorithm and how we can implement it in Python, Java, C++, and C.


The Core Algorithm

The Selection Sort Algorithm is very simple.

  • Set i = 0 initially, since that is the starting point.
  • Find the minimum element of the unsorted sub-array [i..end]
  • We then swap this with the element at the position a[i].
  • We then increment i, and repeat the above steps until i == n

In pseudo-code, we can represent it like this:

PROCEDURE SELECTION_SORT(arr):
    i = -1
    while i < size(arr):
        idx = find_min(arr[i+1..size(arr)])
        swap(i, idx)
        i++
    return arr

Showing the working of the Algorithm

Let’s now understand how this algorithm works, by applying it on an array!

Let’s consider the below array.

Initially, the unsorted array looks like this:

Selection Sort Begin
Selection Sort Begin

In the first iteration, we find the minimum element from the remaining array (from {12, 7, 6, 16, 4}), which is 4. We now swap arr[i] with 4.

Selection Sort Iteration1
Selection Sort Iteration1

In the next iteration, we find the minimum element from the subarray {7, 6, 16, 12}, which is 6. So let’s swap 6 and 7.

Selection Sort Iteration 2
Selection Sort Iteration 2

Now, we move to the next element of the updated array and again do the same steps.

Iteration 3
Selection Sort Iteration 3

In the previous iteration, there was no change, since 7 is the minimum element in the remaining sub-array.

Iteration 4
Selection Sort Iteration 4

Now finally, we reach the end of the array, and now the complete array is sorted!

Let’s apply the Selection Sort Algorithm to sort the above array in Python, C++, and C.


Selection Sort in Python

The below snippet shows the working of the algorithm using Python.

def find_min(arr, start, end):
    minimum = arr[start]
    min_idx = start
    for idx in range(start, end):
        if arr[idx] < minimum:
            minimum = arr[idx]
            min_idx = idx
    return min_idx

def selection_sort(arr):
    i = 0
    arr_size = len(arr)
    while i < arr_size:
        # Find minimum of remaining unsorted subarray
        min_idx = find_min(arr, i, arr_size)
        # Swap with arr[i]
        arr[min_idx], arr[i] = arr[i], arr[min_idx]
        i += 1
    return arr

a = [12, 7, 6, 16, 4]
print(selection_sort(a))

Output

[4, 6, 7, 12, 16]

Selection Sort in Java

public class SelectionSort {
    int find_min(int arr[], int start, int end) {
        int min_idx = start;
        int minimum = arr[start];
        for (int i=start; i<end; i++) {
            if (arr[i] < minimum) {
                min_idx = i;
                minimum = arr[i];
            }
        }
        return min_idx;
    }

    void selection_sort(int arr[], int arr_len) {
        // Selection Sort on an Array
        // Pass by reference 
        int start = 0;
        int min_idx;
        while (start < arr_len) {
            min_idx = find_min(arr, start, arr_len);
            // Swap arr[start] and arr[min_idx]
            int temp = arr[start];
            arr[start] = arr[min_idx];
            arr[min_idx] = temp;
            start++;
        }
    }

    public static void main(String[] args) {
        int arr[] = {12, 7, 6, 16, 4};
        SelectionSort sel_sort = new SelectionSort();
        sel_sort.selection_sort(arr, 5);
        System.out.println("Array after sorting:");
        for (int i=0; i<5; i++) {
            System.out.printf("%d ", arr[i]);
        }
        System.out.println();
    }
}

Save the above code as SelectionSort.java.

Output

Array after sorting:
4 6 7 12 16 

Selection Sort in C++

Here is another implementation of the algorithm in C++

#include <iostream>

using namespace std;


int find_min(int arr[], int start, int end) {
    int min_idx = start;
    int minimum = arr[start];
    for (int i=start; i<end; i++) {
        if (arr[i] < minimum) {
            min_idx = i;
            minimum = arr[i];
        }
    }
    return min_idx;
}


void selection_sort(int arr[], int arr_len) {
    // Selection Sort on an Array
    // Pass by reference 
    int start = 0;
    int min_idx;
    while (start < arr_len) {
        min_idx = find_min(arr, start, arr_len);
        // Swap arr[start] and arr[min_idx]
        int temp = arr[start];
        arr[start] = arr[min_idx];
        arr[min_idx] = temp;
        start++;
    }
}


int main() {
    int arr[] = {12, 7, 6, 16, 4};
    selection_sort(arr, 5);
    cout << "Array after sorting:\n";
    for (int i=0; i<5; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}

Output

Array after sorting:
4 6 7 12 16 

Selection Sort in C

#include <stdio.h>

int find_min(int arr[], int start, int end) {
    int min_idx = start;
    int minimum = arr[start];
    for (int i=start; i<end; i++) {
        if (arr[i] < minimum) {
            min_idx = i;
            minimum = arr[i];
        }
    }
    return min_idx;
}

void selection_sort(int arr[], int arr_len) {
    // Selection Sort on an Array
    int start = 0;
    int min_idx;
    while (start < arr_len) {
        min_idx = find_min(arr, start, arr_len);
        // Swap arr[start] and arr[min_idx]
        int temp = arr[start];
        arr[start] = arr[min_idx];
        arr[min_idx] = temp;
        start++;
    }
}


int main() {
    int arr[] = {12, 7, 6, 16, 4};
    selection_sort(arr, 5);
    printf("Array after sorting:\n");
    for (int i=0; i<5; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

Output

Array after sorting:
4 6 7 12 16 

Time Complexity

Since the algorithm performs 2 loops iterating over the array, it has a time complexity of O(n^2).

If that’s not clear, the total number of operations performed, if the array has n elements is:

(n + (n-1) + (n-2) + (n-3) + … + 1) = n * (n + 1)/2 = O(n^2)

So, while this is not a very good sorting algorithm, it is very easy to implement, and can be used to sort arrays with low number of elements.


Must Reads

References


Leave a Reply

Your email address will not be published. Required fields are marked *

close
Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages