diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 000000000000..a19e87bda8eb --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,4 @@ +Java.iml +.idea/* +out/ +Downloads.iml diff --git a/bin/README.md b/bin/README.md new file mode 100644 index 000000000000..48f442aced40 --- /dev/null +++ b/bin/README.md @@ -0,0 +1,22 @@ +# The Algorithms - Java (WORK IN PROGRESS) + +## Goal +Make it a working Java project with full fledged test cases for each algorithm and correct package structures. Once we have enough test coverage, we would merge it with master + +## Contribution Guidelines + - If you add an algorithm then you have to add a test along with it. In absence of a test the PR would not be approved + - Follow the correct coding guidelines with proper description for the methods. Refer [DecimalToAnyBase.java](https://github.com/TheAlgorithms/Java/blob/Development/src/main/com/java/conversions/DecimalToAnyBase.java) for algorithm and [DecimalToAnyBaseTest.java](https://github.com/TheAlgorithms/Java/blob/Development/src/test/com/java/conversions/DecimalToAnyBaseTest.java) for the test coding standards. + - Do not add a main method as we just need the actual algorithm in a method for the class which we are going to test in the test cases + - Please do not add a signature inside the code. The commit history is sufficient enough to determine who has added the code to the repo. + - Make sure the algorithm which is getting added comes under a certain domain of Algorithms. Please don't create a package with name such as Misc, Others etc. + - While making a PR make sure you are commiting the Java files only and not any project specific files. If you feel that your IDE is generating some extra files then either don't add them to git or add the extensions to ```.gitignore``` + - Please don't add solutions to problems from online judge such as Hackerrank, Leetcode etc + +## Steps to raise a PR +- Fork to [Java Repo](https://github.com/TheAlgorithms/Java) +- Open the forked repo on your local machine +- Switch to ```Development``` branch by using the command ```git checkout Development``` +- Add the JAR for JUnit to your build path. Here is a link for the [JUnit JAR](http://www.java2s.com/Code/Jar/j/Downloadjunit410jar.htm) +- Make the changes on your local machine +- Push the changes to the forked repository +- Raise a PR against the Development branch diff --git a/bin/src/main/java/com/conversions/AnyBaseToDecimal.class b/bin/src/main/java/com/conversions/AnyBaseToDecimal.class new file mode 100644 index 000000000000..aa7ceab839df Binary files /dev/null and b/bin/src/main/java/com/conversions/AnyBaseToDecimal.class differ diff --git a/bin/src/main/java/com/conversions/DecimalToAnyBase.class b/bin/src/main/java/com/conversions/DecimalToAnyBase.class new file mode 100644 index 000000000000..800a541f45ab Binary files /dev/null and b/bin/src/main/java/com/conversions/DecimalToAnyBase.class differ diff --git a/bin/src/main/java/com/search/BinarySearch.class b/bin/src/main/java/com/search/BinarySearch.class new file mode 100644 index 000000000000..08544c86c637 Binary files /dev/null and b/bin/src/main/java/com/search/BinarySearch.class differ diff --git a/bin/src/main/java/com/sorts/BubbleSort.class b/bin/src/main/java/com/sorts/BubbleSort.class new file mode 100644 index 000000000000..0cbe2c43a83b Binary files /dev/null and b/bin/src/main/java/com/sorts/BubbleSort.class differ diff --git a/bin/src/main/java/com/sorts/HeapSort$Heap.class b/bin/src/main/java/com/sorts/HeapSort$Heap.class new file mode 100644 index 000000000000..d89a0f3741c6 Binary files /dev/null and b/bin/src/main/java/com/sorts/HeapSort$Heap.class differ diff --git a/bin/src/main/java/com/sorts/HeapSort.class b/bin/src/main/java/com/sorts/HeapSort.class new file mode 100644 index 000000000000..6bb3ea7216e1 Binary files /dev/null and b/bin/src/main/java/com/sorts/HeapSort.class differ diff --git a/bin/src/main/java/com/sorts/InsertionSort.class b/bin/src/main/java/com/sorts/InsertionSort.class new file mode 100644 index 000000000000..c977b95007fc Binary files /dev/null and b/bin/src/main/java/com/sorts/InsertionSort.class differ diff --git a/bin/src/main/java/com/sorts/QuickSort.class b/bin/src/main/java/com/sorts/QuickSort.class new file mode 100644 index 000000000000..82e1ecdc97e0 Binary files /dev/null and b/bin/src/main/java/com/sorts/QuickSort.class differ diff --git a/bin/src/main/java/com/sorts/SelectionSort.class b/bin/src/main/java/com/sorts/SelectionSort.class new file mode 100644 index 000000000000..8c69cc377728 Binary files /dev/null and b/bin/src/main/java/com/sorts/SelectionSort.class differ diff --git a/bin/src/main/java/com/sorts/ShellSort.class b/bin/src/main/java/com/sorts/ShellSort.class new file mode 100644 index 000000000000..8f22c8a68c5a Binary files /dev/null and b/bin/src/main/java/com/sorts/ShellSort.class differ diff --git a/bin/src/main/java/com/sorts/SortUtils.class b/bin/src/main/java/com/sorts/SortUtils.class new file mode 100644 index 000000000000..1001b4da29f9 Binary files /dev/null and b/bin/src/main/java/com/sorts/SortUtils.class differ diff --git a/bin/src/test/java/com/conversions/AnyBaseToDecimalTest.class b/bin/src/test/java/com/conversions/AnyBaseToDecimalTest.class new file mode 100644 index 000000000000..3bcf34d48b95 Binary files /dev/null and b/bin/src/test/java/com/conversions/AnyBaseToDecimalTest.class differ diff --git a/bin/src/test/java/com/conversions/DecimalToAnyBaseTest.class b/bin/src/test/java/com/conversions/DecimalToAnyBaseTest.class new file mode 100644 index 000000000000..ab805cda0959 Binary files /dev/null and b/bin/src/test/java/com/conversions/DecimalToAnyBaseTest.class differ diff --git a/bin/src/test/java/com/search/BinarySearchTest.class b/bin/src/test/java/com/search/BinarySearchTest.class new file mode 100644 index 000000000000..ee18ca621ed3 Binary files /dev/null and b/bin/src/test/java/com/search/BinarySearchTest.class differ diff --git a/bin/src/test/java/com/sorts/BubbleSortTest.class b/bin/src/test/java/com/sorts/BubbleSortTest.class new file mode 100644 index 000000000000..c9484f8b01c1 Binary files /dev/null and b/bin/src/test/java/com/sorts/BubbleSortTest.class differ diff --git a/bin/src/test/java/com/sorts/HeapSortTest.class b/bin/src/test/java/com/sorts/HeapSortTest.class new file mode 100644 index 000000000000..f537eebf74ad Binary files /dev/null and b/bin/src/test/java/com/sorts/HeapSortTest.class differ diff --git a/bin/src/test/java/com/sorts/InsertionSortTest.class b/bin/src/test/java/com/sorts/InsertionSortTest.class new file mode 100644 index 000000000000..02da5654648a Binary files /dev/null and b/bin/src/test/java/com/sorts/InsertionSortTest.class differ diff --git a/bin/src/test/java/com/sorts/QuickSortTest.class b/bin/src/test/java/com/sorts/QuickSortTest.class new file mode 100644 index 000000000000..6f14a292dced Binary files /dev/null and b/bin/src/test/java/com/sorts/QuickSortTest.class differ diff --git a/bin/src/test/java/com/sorts/SelectionSortTest.class b/bin/src/test/java/com/sorts/SelectionSortTest.class new file mode 100644 index 000000000000..5702ad282e54 Binary files /dev/null and b/bin/src/test/java/com/sorts/SelectionSortTest.class differ diff --git a/bin/src/test/java/com/sorts/ShellSortTest.class b/bin/src/test/java/com/sorts/ShellSortTest.class new file mode 100644 index 000000000000..6bb98a5e028d Binary files /dev/null and b/bin/src/test/java/com/sorts/ShellSortTest.class differ diff --git a/src/main/java/com/sorts/InsertionSort.java b/src/main/java/com/sorts/InsertionSort.java new file mode 100644 index 000000000000..e7deb8970149 --- /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 000000000000..e579c664a42e --- /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)); + } +}