## Selection Sort

The algorithm finds the minimum value, swaps it with the value in the first position, and repeats these steps for the remainder of the list. It does no more than n swaps, and thus is useful where swapping is very expensive.

Selection Sort, Wikipedia

When you are learning Java you are very likely going to be asked to write a program to sort values. We will start with one of the simpler sort algorithms, the Selection Sort (also known as an Exchange Sort). It’s not a particularly efficient algorithm and really only suitable for small lists.

```package com.learnjava.math.sort;

import java.util.Random;

/**
* Write a program to sort an array of numbers using a Selection Sort
* Also known as an Exchange Sort
*
* @author http://learn-java-by-example.com
*
*/
public class SelectionSort {

public static void main(String[] args) {

// Create an array of random numbers to sort

int[] data = generateData();

// Display the unsorted data

System.out.println("Unsorted data:");
printArray(data);

// Sort the array

sortArray(data);

// Display the sorted data

System.out.println("Sorted data:");
printArray(data);
}

private static void sortArray(int[] data) {

// Loop through the array,
// comparing each value with each of the following values

for (int i=0; i<data.length-1; i++) {
for (int j=i+1; j<data.length; j++) {

// Check if the value needs to be swapped or not

if (data[i] < data[j]) {

// Swap values

int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}

// Print out the array after we have
// finished each element to see the progress

System.out.println("Loop " + i);
printArray(data);
}
}

private static int[] generateData() {
Random random = new Random();

int[] data = new int;
for (int i=0; i<data.length; i++) {
data[i] = random.nextInt(100);
}
return data;
}

private static void printArray(int[] data) {
for (int i=0; i<data.length; i++) {
System.out.print(data[i]);
System.out.print(", ");
}
System.out.println();
}
}
```