Selection sort
Algorithm
def selection(a)
    """
    Implements the selection sort algorithm
    """
    for i in range(0,len(a)):
        min_index = i
        min_element = a[i]
        # Find minimum value
        for j in range(i, len(a)):
            if a[j] < min_element:
                min_index = j
                min_element = a[j]
        # Exchange current and minimum values
        temp = a[i]
        a[i] = min_element
        a[min_index] = temp
    return a
Key concepts
- In each step, find the minimum element.
 - Exchange the minimum element with the current element.
 
Step by step
array = [1,0,3,4,2,5]
i = 0
    min_index = 0
    min_element = 1
    j = 1
        a[1] < min_element | 0 < 1 | True
        min_index = 1
        min_element = 0
    j = 2
        a[2] < min_element | 3 < 0 | False
    j = 3
        a[3] < min_element | 4 < 0 | False
    j = 4
        a[4] < min_element | 2 < 0 | False
    j = 5
        a[5] < min_element | 5 < 0 | False
    temp = a[0]         | temp = 1
    a[0] = min_element  | a[0] = 0
    a[min_index] = temp | a[1] = 1
    array = [0,1,3,4,2,5]
i = 1
    min_index = 1
    min_element = 1
    j = 2
        a[2] < min_element | 3 < 1 | False
    j = 3
        a[3] < min_element | 4 < 1 | False
    j = 4
        a[4] < min_element | 2 < 2 | False
    j = 5
        a[5] < min_element | 5 < 1 | False
    temp = a[1]         | temp = 1
    a[1] = min_element  | a[1] = 1
    a[min_index] = temp | a[1] = 1
    array = [0,1,3,4,2,5]
i = 2
    min_index = 2
    min_element = 3
    j = 3
        a[3] < min_element | 4 < 3 | False
    j = 4
        a[4] < min_element | 2 < 3 | True
        min_index = 4
        min_element = 2
    j = 5
        a[5] < min_element | 5 < 3 | False
    temp = a[2]         | temp = 3
    a[2] = min_element  | a[2] = 2
    a[min_index] = temp | a[4] = 3
    array = [0,1,2,4,3,5]
Complexity analysis
Time
For each element of the array, we compare it with the remaining elements of the array. For each element of the array, we exchange it with the minimum element of the array.
i = 0
    5 comparisons ; 1 exchange
i = 1
    4 comparisons ; 1 exchange
i = 2
    3 comparisons ; 1 exchange
i = 3
    2 comparisons ; 1 exchange
i = 4
    1 comparisons ; 1 exchange
i = 5
    0 comparisons ; 1 exchange
Comparisons: (N-1) + (N-2) + … 1 -> 1 + 2 + … + (N-1) = N(N-1) / 2 ≈ N²/2 Exchanges: 1 + 1 + … + 1 = N
O(N) = (N²/2) + N ≈ (N²/2)
Space
We use the same array that is passed as an argument and a few more variables, so O(N) = N + O(i) + O(j) + O(min_index) + O(min_element) + O(temp) = N + 5·O(1) = N + 5
O(N) = N + 5 ≈ N.