Sorting program code
A few things.
for (int i = 0; i &lt; numbers.length-1; i++)

Also, look up quick sort.  Worst-case performance O(n^2) with a best-case of O(nlogn).  By randomizing the pivot in the quick sort you can enhance the best case scenario.
Psuedo for recursive Quicksort:
partition(arr[], low, high)
    pivot = arr[high]
    i = low
    for j:= low to high-1
        if arr[j] &lt;= pivot
            swap arr[i] with arr[j]
            i = i+1
   swap arr[i] with arr[high]

random(arr[], low, high)
    r = a random number from low to high
    swap arr[r] and arr[high]
    return partition(arr, low, high)

quickSort(arr[], low, high)
    if low &lt; high
        p = random(arr, low, high)
        quickSort(arr, low , p-1)
        quickSort(arr, p+1, high)