p2sh 0.4.3

The p2sh Programming language interpreter
#!/usr/bin/env p2sh

// Quick sort algorithm implementation
// Alternatively, the inbuilt 'sort()' method
// may also be used to sort an array of objects.

fn swap(a, i, j) {
    let t = a[i];
    a[i] = a[j];
    a[j] = t;
}

fn shuffle(a) {
    let i = 0;
    let n = len(a);
    while i < n {
        let r = rand() % n;
        swap(a, i, r);
        i = i + 1;
    }
}

fn partition(a, lo, hi) {
    let i = lo;
    let j = hi + 1;
    let v = a[lo];   //partitioning element
    while true {
        while a[i = i + 1] < v {
            if i == hi {
                break;
            }
        }
        while v < a[j = j - 1] {
            if j == lo {
                break;
            }
        }
        if i >= j {
            break;
        }
        swap(a, i, j);
    }
    swap(a, lo, j);
    return j;
}

fn sort_quick(a, lo, hi) {
    if hi <= lo {
        return;
    }
    let j = partition(a, lo, hi);
    sort_quick(a, lo, j - 1);
    sort_quick(a, j + 1, hi);
}

let a = [141, 1, 17, -7, -17, -27, 18, 541, 8, 7, 7];
puts(a);
shuffle(a);
// Builtin sort method
// sort(a, 0, len(a) - 1);
sort_quick(a, 0, len(a) - 1);
puts(a);