public class SelectionSortGeneric < T extends Comparable <? super T >> {
public static void main ( String [] args )
{
// example using Strings
String [] arrayOfStrings = { "Andree" , "Leana" , "Faviola" , "Loyce" , "Quincy" , "Milo" , "Jamila" , "Toccara" , "Nelda" , "Blair" , "Ernestine" , "Chara" , "Kareen" , "Monty" , "Rene" , "Cami" , "Winifred" , "Tara" , "Demetrice" , "Azucena" };
SelectionSortGeneric < String > stringSorter = new SelectionSortGeneric <>();
stringSorter . selectionSort ( arrayOfStrings );
System . out . println ( java . util . Arrays . toString ( arrayOfStrings ));
// example using Doubles
Double [] arrayOfDoubles = { 0.35 , 0.02 , 0.36 , 0.82 , 0.27 , 0.49 , 0.41 , 0.17 , 0.30 , 0.89 , 0.37 , 0.66 , 0.82 , 0.17 , 0.20 , 0.96 , 0.18 , 0.25 , 0.37 , 0.52 };
SelectionSortGeneric < Double > doubleSorter = new SelectionSortGeneric <>();
doubleSorter . selectionSort ( arrayOfDoubles );
System . out . println ( java . util . Arrays . toString ( arrayOfDoubles ));
}
void selectionSort ( T [] array )
{
// step 1: loop from the beginning of the array to the second to last item
for ( int currentIndex = 0 ; currentIndex < array . length - 1 ; currentIndex ++)
{
// step 2: save a copy of the currentIndex
int minIndex = currentIndex ;
// step 3: loop through all indexes that proceed the currentIndex
for ( int i = currentIndex + 1 ; i < array . length ; i ++)
{
// step 4: if the value of the index of the current loop is less
// than the value of the item at minIndex, update minIndex
// with the new lowest value index */
if ( array [ i ]. compareTo ( array [ minIndex ]) < 0 )
{
// update minIndex with the new lowest value index
minIndex = i ;
}
}
// step 5: if minIndex has been updated, swap the values at minIndex and currentIndex
if ( minIndex != currentIndex )
{
T temp = array [ currentIndex ];
array [ currentIndex ] = array [ minIndex ];
array [ minIndex ] = temp ;
}
}
}
}