Bubble sort

Computational complexity: O(N2)

Click "Start" to begin animation

C

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

C++

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

Java

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

Go

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

PHP

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

Perl

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

Python

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

Ruby

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

Delphi

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

Rust

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

Assembler

mov ecx, n
dec ecx
outer_loop:
    mov edi, ecx
    xor ebx, ebx
    inner_loop:
        mov eax, [arr + ebx*4]
        mov edx, [arr + ebx*4 + 4]
        cmp eax, edx
        jle no_swap
        mov [arr + ebx*4], edx
        mov [arr + ebx*4 + 4], eax
        no_swap:
        inc ebx
        cmp ebx, edi
        jl inner_loop
    loop outer_loop

JavaScript

function bubbleSort(a)
{
    var swapped;
    do {
        swapped = false;
        for (var i=0; i < a.length-1; i++) {
            if (a[i] > a[i+1]) {
                var temp = a[i];
                a[i] = a[i+1];
                a[i+1] = temp;
                swapped = true;
            }
        }
    } while (swapped);
}

Lua

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