Selection sort

Computational complexity: O(N2)

Click "Start" to begin animation

C

void selectionSort(int arr[], int n) {
    int i, j, minIdx, temp;
    for (i = 0; i < n-1; i++) {
        minIdx = i;
        for (j = i+1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        temp = arr[minIdx];
        arr[minIdx] = arr[i];
        arr[i] = temp;
    }
}

C++

void selectionSort(int arr[], int n) {
    int i, j, minIdx, temp;
    for (i = 0; i < n-1; i++) {
        minIdx = i;
        for (j = i+1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        temp = arr[minIdx];
        arr[minIdx] = arr[i];
        arr[i] = temp;
    }
}

Java

void selectionSort(int arr[]) {
    int n = arr.length;
    for (int i = 0; i < n-1; i++) {
        int minIdx = i;
        for (int j = i+1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        int temp = arr[minIdx];
        arr[minIdx] = arr[i];
        arr[i] = temp;
    }
}

Go

func selectionSort(arr []int) {
    n := len(arr)
    for i := 0; i < n-1; i++ {
        minIdx := i
        for j := i+1; j < n; j++ {
            if arr[j] < arr[minIdx] {
                minIdx = j
            }
        }
        arr[i], arr[minIdx] = arr[minIdx], arr[i]
    }
}

PHP

function selectionSort(array $arr) {
    $n = count($arr);
    for ($i = 0; $i < $n-1; $i++) {
        $minIdx = $i;
        for ($j = $i+1; $j < $n; $j++) {
            if ($arr[$j] < $arr[$minIdx]) {
                $minIdx = $j;
            }
        }
        $temp = $arr[$minIdx];
        $arr[$minIdx] = $arr[$i];
        $arr[$i] = $temp;
    }
    return $arr;
}

Perl

sub selectionSort {
    my @arr = @_;
    my $n = scalar @arr;
    for (my $i = 0; $i < $n-1; $i++) {
        my $minIdx = $i;
        for (my $j = $i+1; $j < $n; $j++) {
            if ($arr[$j] < $arr[$minIdx]) {
                $minIdx = $j;
            }
        }
        (my $arr[$i], $arr[$minIdx]) = ($arr[$minIdx], $arr[$i]);
    }
    return @arr;
}

Python

def selectionSort(arr):
    n = len(arr)
    for i in range(n-1):
        minIdx = i
        for j in range(i+1, n):
            if arr[j] < arr[minIdx]:
                minIdx = j
        arr[i], arr[minIdx] = arr[minIdx], arr[i]

Ruby

def selectionSort(arr)
    n = arr.length
    (0...n-1).each do |i|
        minIdx = i
        ((i+1)...n).each do |j|
            if arr[j] < arr[minIdx]
                minIdx = j
            end
        end
        arr[i], arr[minIdx] = arr[minIdx], arr[i]
    end
    arr
end

Delphi

procedure SelectionSort(var Arr: array of Integer);
var
    i, j, minIdx, Temp: Integer;
begin
    for i := 0 to High(Arr) -1 do
    begin
        minIdx := i;
        for j := i +1 to High(Arr) do
            if Arr[j] < Arr[minIdx] then
                minIdx := j;
        Temp := Arr[minIdx];
        Arr[minIdx] := Arr[i];
        Arr[i] := Temp;
    end;
end;

Rust

fn selectionSort(arr: &mut[i32]) {
    let n = arr.len();
    for i in 0..n-1 {
        let mut minIdx = i;
        for j in (i+1)..n {
            if arr[j] < arr[minIdx] {
                minIdx = j;
            }
        }
        arr.swap(i, minIdx);
    }
}

Assembler

mov ecx, 0
outer_loop:
    cmp ecx, n-1
    jge done
    mov edi, ecx
    mov eax, ecx
    mov ebx, ecx
    inc ebx
    inner_loop:
        cmp ebx, n
        jge swap
        mov edx, [arr + ebx*4]
        cmp edx, [arr + edi*4]
        jge next
        mov edi, ebx
        next:
        inc ebx
        jmp inner_loop
    swap:
        mov edx, [arr + eax*4]
        mov esi, [arr + edi*4]
        mov [arr + eax*4], esi
        mov [arr + edi*4], edx
        inc ecx
        jmp outer_loop
done:

JavaScript

function selectionSort(arr)
{
    var n = arr.length;
    for (var i = 0; i < n-1; i++) {
        var minIdx = i;
        for (var j = i+1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        var temp = arr[minIdx];
        arr[minIdx] = arr[i];
        arr[i] = temp;
    }
}

Lua

function selectionSort(arr)
    local n = #arr
    for i = 1, n-1 do
        local minIdx = i
        for j = i+1, n do
            if arr[j] < arr[minIdx] then
                minIdx = j
            end
        end
        arr[i], arr[minIdx] = arr[minIdx], arr[i]
    end
end