diff --git a/src/main/java/com/sorts/InsertionSort.java b/src/main/java/com/sorts/InsertionSort.java new file mode 100644 index 00000000..e7deb897 --- /dev/null +++ b/src/main/java/com/sorts/InsertionSort.java @@ -0,0 +1,27 @@ +package src.main.java.com.sorts; + +public class InsertionSort { + + /** + * This method implements the Generic Insertion Sort + * Sorts the array in increasing order + * + * @param array The array to be sorted + **/ + public > T[] sort(T[] array) { + for (int j = 1; j < array.length; j++) { + + // Picking up the key(Card) + T key = array[j]; + int i = j - 1; + + while (i >= 0 && SortUtils.less(key, array[i])) { + array[i + 1] = array[i]; + i--; + } + // Placing the key (Card) at its correct position in the sorted subarray + array[i + 1] = key; + } + return array; + } +} diff --git a/src/test/java/com/sorts/InsertionSortTest.java b/src/test/java/com/sorts/InsertionSortTest.java new file mode 100644 index 00000000..e579c664 --- /dev/null +++ b/src/test/java/com/sorts/InsertionSortTest.java @@ -0,0 +1,27 @@ +package src.test.java.com.sorts; + + +import org.junit.Assert; +import org.junit.Test; +import src.main.java.com.sorts.InsertionSort; + +import java.util.Arrays; + +public class InsertionSortTest { + + @Test + public void insertionSortTest() { + InsertionSort insertionSort = new InsertionSort(); + Integer[] unsortedInt = new Integer[]{0, 5, 9, 2, 1, 3, 4, 8, 6, 7}; + Integer[] sortedInt = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + System.out.println(Arrays.toString(insertionSort.sort(unsortedInt))); + + Assert.assertArrayEquals(sortedInt, insertionSort.sort(unsortedInt)); + + Character[] unsortedChar = new Character[]{'f', 'h', 'c', 'a', 'b', 'd', 'g', 'e'}; + Character[] sortedChar = new Character[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; + System.out.println(Arrays.toString(insertionSort.sort(unsortedChar))); + + Assert.assertArrayEquals(sortedChar, insertionSort.sort(unsortedChar)); + } +}