SlectionSort.java
package algorithms;

import java.util.ArrayList;
import java.util.Scanner;

public class SlectionSort {
    public static void main (String[] args){
        // Read some numbers from the user's input and store them to the list
        ArrayList<Integer> numbers = readNumbersFromStandInput();
        System.out.println("Unsorted list :" + numbers);
        // Sort the list
        Sort(numbers);
        // Display it
        System.out.println("Sorted list :" + numbers);
    }
    private static void Sort(ArrayList<Integer> numbers) {
        // Begin with limit at the end of numbers and decrement it until we're at the begining
        for (int limit = numbers.size()-1; limit > 1; limit--){
            // Find the index of the max value in the unsorted point of the list
            int mx = maxIndex(numbers,limit);
            // Swap the element at the max index with the element
            swap(numbers,mx,limit);
        }
    }
    private static Integer maxIndex(ArrayList<Integer> numbers, int limit) {
        // Initial champion
        Integer champion = numbers.get(0);
        int cx = 0;
        for(int i = 0; i <= limit; i++){
            Integer challenger = numbers.get(i);
            if (challenger > champion){
                champion = challenger;
                cx = i;
            }
        }
        // Return Champion Index
        return cx;
    }
    private static ArrayList<Integer> readNumbersFromStandInput() {
        // Establish a place to store the numbers
        ArrayList<Integer> numbers = new ArrayList<>();
        // Prepare to read the numbers
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter some positive integers, " + "followed by a negative integers");
        // Read and store the numbers in the ArrayList
        Integer readNumber = scanner.nextInt();
        while (readNumber >= 0) {
            numbers.add(readNumber);
            readNumber = scanner.nextInt();
        }
        // Return the numbers
        return numbers;
    }
    private static void swap(ArrayList<Integer> numbers, int mx, int x){
        Integer temp = numbers.get(mx);
        numbers.set(mx, numbers.get(x));
        numbers.set(x,temp);
    }
}