## General Algorithm

a. Iterates through the entire array in an outer loop. It initializes a minimum variable as the current value of i.
b. Uses an inner loop starting from the first loop’s index + 1. In this loop it looks for the lowest value. c. Once it has completed the inner loop and found the lowest value, it compares that value to the current value of i from the outer loop. If the minimum from the inner loop is less, then it is swapped with the value of i from the outer loop.

It thus sequentially sorts an array in place. Swaps are kept to a minimum (N - 1 worst case) but compares are quadratic (N^2).

int length = arr.length;
//
// Selection sort
//

// Progressivelly walk through the array
// This is the outer loop
for (int i = 0; i < length; i++) {
// establish the minimum as the current index
int min = i;

// Walk through the array starting from the outerloop + 1 since
// we want to check for a number that is lower in the rest of the array
// This is the inner loop
for (int j = i + 1; j < length; j++) {
// if the current minimum value is greater than the current array value in
// the inner loop, update the minimum
if (arr[j] < arr[min]) min = j;
}

// Make the swap if min is less than the current array element.
// You can have it swap every time but I needed to restrict it for my use case
if (arr[min] < arr[i]) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}

return arr;