package com.hithomelabs.princeton1.module5; import java.util.Comparator; public class Selection implements MeasurableSort, MeasurableHelper { /* * * Selection sort "selects" the smallest element and swaps it with arr[0] of the array * * Then proceeds to do the same swapping arr[i] with arr[i:arr.length-1] */ public void sort(E[] arr){ coreSortLogic(arr, null, null); } private void coreSortLogic(E[] arr, Comparator cmp, SortingMetaData metaData){ if (arr == null) return; Comparable[] arr1 = (Comparable[]) arr; for(int i = 0; i < arr1.length - 1; i++){ int minIndex = i; for(int j = i+1; j < arr.length; j ++){ if (MeasurableHelper.less(arr[j], arr[minIndex], cmp, metaData)) minIndex = j; } MeasurableHelper.exch(arr, i, minIndex, metaData); } } @Override public void sort(E[] arr, Comparator cmp, SortingMetaData metaData) { if (metaData != null) metaData.startTime(); coreSortLogic(arr, cmp, metaData); if (metaData != null) metaData.endTime(); } @Override public void sort(E[] arr, Comparator cmp) { coreSortLogic(arr, cmp, null); } @Override public String toString() { return "Selection Sort"; } }