50 lines
1.3 KiB
Java
50 lines
1.3 KiB
Java
package net.abhinavsarkar.algorist.sort;
|
|
|
|
import java.util.Arrays;
|
|
import net.abhinavsarkar.algorist.Sorter;
|
|
|
|
public class SelectionSorter<T> implements Sorter<T>
|
|
{
|
|
@Override
|
|
public T[] sort(T[] input, Comparator<T> comparator)
|
|
{
|
|
for (int i = 0; i < input.length - 1; i++) {
|
|
int j = findMinimumIndex(input, i, comparator);
|
|
swap(input, i, j);
|
|
}
|
|
return input;
|
|
}
|
|
|
|
private int findMinimumIndex(T[] input, int idx, Comparator<T> comparator) {
|
|
int minIdx = -1;
|
|
T min = null;
|
|
for (int j = idx; j < input.length; j++) {
|
|
if (min == null || comparator.compare(input[j], min) < 0) {
|
|
min = input[j];
|
|
minIdx = j;
|
|
}
|
|
}
|
|
return minIdx;
|
|
}
|
|
|
|
private void swap(T[] input, int i, int j)
|
|
{
|
|
if (i == j) {
|
|
return;
|
|
}
|
|
|
|
T temp = input[i];
|
|
input[i] = input[j];
|
|
input[j] = temp;
|
|
}
|
|
|
|
public static void main(String[] args)
|
|
{
|
|
Sorter<String> sorter = new SelectionSorter<>();
|
|
String[] sorted =
|
|
sorter.sort(new String[]{"abhinav", "sarkar", "barista", "jordan", "data"},
|
|
(s, anotherString) -> anotherString.compareTo(s));
|
|
System.out.println(Arrays.toString(sorted));
|
|
}
|
|
}
|