From 924b5ded5ec816124ded87cef613dab234818902 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sat, 12 Oct 2024 23:49:29 +0530 Subject: [PATCH 01/53] Create StalinSort.java --- .../com/thealgorithms/sorts/StalinSort.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/com/thealgorithms/sorts/StalinSort.java diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java new file mode 100644 index 000000000000..8ccc1e1d53dd --- /dev/null +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -0,0 +1,42 @@ +package com.thealgorithms.sorts; + +/** + * @author Anant Jain (https://github.com/anant-jain01) + * @see https://medium.com/@kaweendra/the-ultimate-sorting-algorithm-6513d6968420 + */ +public class StalinSort implements SortAlgorithm { + + public > T[] sort(T[] array) { + int currentIndex = 0; + + for (int i = 1; i < array.length; i++) { + if (array[i].compareTo(array[currentIndex]) >= 0) { + currentIndex++; + array[currentIndex] = array[i]; + } + } + + // Create a result array with sorted elements + T[] result = (T[]) new Comparable[currentIndex + 1]; + System.arraycopy(array, 0, result, 0, currentIndex + 1); + + return result; + } + + // Driver Program + public static void main(String[] args) { + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + + StalinSort stalinSort = new StalinSort(); + + // print a sorted array + SortUtils.print(stalinSort.sort(integers)); + + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; + + SortUtils.print(stalinSort.sort(strings)); + } +} +Footer From bed6b83fcc312019b00219eb17ba6f789c498b04 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sat, 12 Oct 2024 23:52:23 +0530 Subject: [PATCH 02/53] Create StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/test/java/com/thealgorithms/sorts/StalinSortTest.java diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java new file mode 100644 index 000000000000..1e6c7786b2f1 --- /dev/null +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -0,0 +1,83 @@ +package com.thealgorithms.sorts; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.stream.Stream; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public class StalinSortTest { + + @ParameterizedTest + @MethodSource("provideArraysForStalinSort") + public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) { + StalinSort stalinSort = new StalinSort(); + assertArrayEquals(expectedArray, stalinSort.sort(inputArray)); + } + + private static Stream provideArraysForStalinSort() { + return Stream.of( + // Test empty array + Arguments.of(new Integer[] {}, new Integer[] {}), + + // Test single element array + Arguments.of(new Integer[] {4}, new Integer[] {4}), + + // Test array with multiple elements + Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), + Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), + Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), + Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + + // Test with negative numbers + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), + Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), + + // Test mixed values (positive, negative, zero) + Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + + // Test with duplicate values + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), + Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), + + // Test large numbers + Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + + // Test with characters + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), + + // Test with a large dataset + Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) + ); + } + + @Test + public void testWithEmptyArray() { + StalinSort stalinSort = new StalinSort(); + Integer[] inputArray = {}; + Integer[] expectedArray = {}; + assertArrayEquals(expectedArray, stalinSort.sort(inputArray)); + } + + @Test + public void testWithNullValues() { + assertThrows(NullPointerException.class, () -> { + StalinSort stalinSort = new StalinSort(); + stalinSort.sort(null); + }); + } + + @Test + public void testWithMixedDataTypes() { + // This test checks the algorithm's capability with mixed types, if applicable. + // Note: Ensure that your algorithm is capable of handling mixed types; if not, this test will fail. + assertThrows(ClassCastException.class, () -> { + StalinSort stalinSort = new StalinSort(); + stalinSort.sort(new Comparable[] {"a", 1}); + }); + } +} From ae3b9d1988218fa13f86051db937b03fb67bf57a Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sat, 12 Oct 2024 23:54:47 +0530 Subject: [PATCH 03/53] Update pom.xml --- pom.xml | 49 +++++++++---------------------------------------- 1 file changed, 9 insertions(+), 40 deletions(-) diff --git a/pom.xml b/pom.xml index 673be6cd4e36..954475165581 100644 --- a/pom.xml +++ b/pom.xml @@ -2,6 +2,7 @@ + 4.0.0 com.thealgorithms Java @@ -12,7 +13,10 @@ UTF-8 21 21 - 3.26.3 + 3.26.3 + 5.11.2 + 3.17.0 + 4.5.0-M2 @@ -20,7 +24,7 @@ org.junit junit-bom - 5.11.2 + ${junit.version} pom import @@ -31,7 +35,7 @@ org.junit.jupiter junit-jupiter - 5.11.2 + ${junit.version} test @@ -40,22 +44,15 @@ ${assertj.version} test - - - org.junit.jupiter - junit-jupiter-api - 5.11.2 - test - org.apache.commons commons-lang3 - 3.17.0 + ${commons-lang3.version} org.apache.commons commons-collections4 - 4.5.0-M2 + ${commons-collections4.version} @@ -64,9 +61,6 @@ maven-surefire-plugin 3.5.1 - - - org.apache.maven.plugins @@ -77,10 +71,6 @@ 21 -Xlint:all - -Xlint:-auxiliaryclass - -Xlint:-rawtypes - -Xlint:-unchecked - -Xlint:-lossy-conversions -Werror @@ -114,13 +104,6 @@ true warning - - - com.puppycrawl.tools - checkstyle - 10.18.2 - - com.github.spotbugs @@ -129,18 +112,6 @@ spotbugs-exclude.xml true - - - com.mebigfatguy.fb-contrib - fb-contrib - 7.6.5 - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.13.0 - - @@ -150,8 +121,6 @@ true true - false - pmd-exclude.properties From ca18ef8495e7ef2901b9ef3010b2c7ff14f2bfb6 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:01:23 +0530 Subject: [PATCH 04/53] Update pom.xml --- pom.xml | 67 +++++++++++++++++++++++++-------------------------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/pom.xml b/pom.xml index 954475165581..cf8e8e14f215 100644 --- a/pom.xml +++ b/pom.xml @@ -1,13 +1,11 @@ - - + 4.0.0 com.thealgorithms Java 1.0-SNAPSHOT - jar UTF-8 @@ -44,6 +42,12 @@ ${assertj.version} test + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + org.apache.commons commons-lang3 @@ -58,69 +62,56 @@ - - maven-surefire-plugin - 3.5.1 - org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.10.1 - 21 - 21 + ${maven.compiler.source} + ${maven.compiler.target} -Xlint:all + -Xlint:-auxiliaryclass + -Xlint:-rawtypes + -Xlint:-unchecked + -Xlint:-lossy-conversions -Werror - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - - prepare-agent - - - - generate-code-coverage-report - test - - report - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.5.0 + maven-surefire-plugin + 3.5.1 - checkstyle.xml - true - true - warning + com.github.spotbugs spotbugs-maven-plugin - 4.8.6.4 + 4.7.0 spotbugs-exclude.xml true + + com.puppycrawl.tools + checkstyle-maven-plugin + 10.18.2 + + true + warning + + org.apache.maven.plugins maven-pmd-plugin - 3.25.0 + 3.15.0 true true + false From 60cd02fdea79d7e9f3ba9f4e2cab1def033779ff Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:05:11 +0530 Subject: [PATCH 05/53] Update pom.xml --- pom.xml | 100 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 27 deletions(-) diff --git a/pom.xml b/pom.xml index cf8e8e14f215..dafceb65a7f1 100644 --- a/pom.xml +++ b/pom.xml @@ -1,20 +1,18 @@ + - 4.0.0 com.thealgorithms Java 1.0-SNAPSHOT + jar UTF-8 21 21 - 3.26.3 - 5.11.2 - 3.17.0 - 4.5.0-M2 + 3.26.3 @@ -22,7 +20,7 @@ org.junit junit-bom - ${junit.version} + 5.11.2 pom import @@ -33,7 +31,13 @@ org.junit.jupiter junit-jupiter - ${junit.version} + 5.11.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.11.2 test @@ -42,33 +46,41 @@ ${assertj.version} test + org.junit.jupiter junit-jupiter-api - ${junit.version} + 5.11.2 test org.apache.commons commons-lang3 - ${commons-lang3.version} + 3.17.0 org.apache.commons commons-collections4 - ${commons-collections4.version} + 4.5.0-M2 + + maven-surefire-plugin + 3.5.1 + + + + org.apache.maven.plugins maven-compiler-plugin - 3.10.1 + 3.13.0 - ${maven.compiler.source} - ${maven.compiler.target} + 21 + 21 -Xlint:all -Xlint:-auxiliaryclass @@ -80,38 +92,72 @@ - maven-surefire-plugin - 3.5.1 + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + + prepare-agent + + + + generate-code-coverage-report + test + + report + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.5.0 - + checkstyle.xml + true + true + warning + + + com.puppycrawl.tools + checkstyle + 10.18.2 + + com.github.spotbugs spotbugs-maven-plugin - 4.7.0 + 4.8.6.4 spotbugs-exclude.xml true - - - - com.puppycrawl.tools - checkstyle-maven-plugin - 10.18.2 - - true - warning + + + com.mebigfatguy.fb-contrib + fb-contrib + 7.6.5 + + + com.h3xstream.findsecbugs + findsecbugs-plugin + 1.13.0 + + org.apache.maven.plugins maven-pmd-plugin - 3.15.0 + 3.25.0 true true false + pmd-exclude.properties From ac7b48f49466f91103a5953d974cfc5e6754f885 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:08:06 +0530 Subject: [PATCH 06/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 43 ++++++------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 1e6c7786b2f1..1acbdb267ef6 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -20,38 +20,21 @@ public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) private static Stream provideArraysForStalinSort() { return Stream.of( - // Test empty array - Arguments.of(new Integer[] {}, new Integer[] {}), - - // Test single element array Arguments.of(new Integer[] {4}, new Integer[] {4}), + Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), + Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), + Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), + Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), + Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), + Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), + Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), + Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), + Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); - // Test array with multiple elements - Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), - Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), - Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), - Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - - // Test with negative numbers - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), - Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), - - // Test mixed values (positive, negative, zero) - Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - - // Test with duplicate values - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), - Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), - - // Test large numbers - Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - - // Test with characters - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - - // Test with a large dataset - Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) ); } From e7f7e3b912856baf0ae16057c4a7dc6742ff89c0 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:08:58 +0530 Subject: [PATCH 07/53] Update StalinSortTest.java --- src/test/java/com/thealgorithms/sorts/StalinSortTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 1acbdb267ef6..08cfdc970a22 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -56,8 +56,6 @@ public void testWithNullValues() { @Test public void testWithMixedDataTypes() { - // This test checks the algorithm's capability with mixed types, if applicable. - // Note: Ensure that your algorithm is capable of handling mixed types; if not, this test will fail. assertThrows(ClassCastException.class, () -> { StalinSort stalinSort = new StalinSort(); stalinSort.sort(new Comparable[] {"a", 1}); From 450b6c8c0cee97e8c7c8f4ac45aea94949d6aab6 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:09:34 +0530 Subject: [PATCH 08/53] Update StalinSort.java --- src/main/java/com/thealgorithms/sorts/StalinSort.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index 8ccc1e1d53dd..01558a55fd00 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -39,4 +39,3 @@ public static void main(String[] args) { SortUtils.print(stalinSort.sort(strings)); } } -Footer From 92527fb657802d52de8cc81e684e921bebddd36a Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:11:47 +0530 Subject: [PATCH 09/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 08cfdc970a22..c26ca8002476 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -20,22 +20,20 @@ public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) private static Stream provideArraysForStalinSort() { return Stream.of( - Arguments.of(new Integer[] {4}, new Integer[] {4}), - Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), - Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), - Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), - Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), - Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), - Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), - Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), - Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); - - ); + Arguments.of(new Integer[] {4}, new Integer[] {4}), + Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), + Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), + Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), + Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), + Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), + Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), + Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), + Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), + Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); } @Test From cf2374dd84e4e35ff622407f703ca83bed9969d5 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:14:04 +0530 Subject: [PATCH 10/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index c26ca8002476..d28849b8aedf 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -19,22 +19,11 @@ public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) } private static Stream provideArraysForStalinSort() { - return Stream.of( - Arguments.of(new Integer[] {4}, new Integer[] {4}), - Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), - Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), - Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), - Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), - Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), - Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), - Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), - Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); - } + return Stream.of(Arguments.of(new Integer[] {4}, new Integer[] {4}), Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); @Test public void testWithEmptyArray() { From 4eb8ce7b0dfe4790206624f2459afb554129f0ba Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:16:18 +0530 Subject: [PATCH 11/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index d28849b8aedf..fe6d89c613d5 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -19,11 +19,23 @@ public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) } private static Stream provideArraysForStalinSort() { - return Stream.of(Arguments.of(new Integer[] {4}, new Integer[] {4}), Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); + return Stream.of( + Arguments.of(new Integer[] {4}, new Integer[] {4}), + Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), + Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), + Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), + Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), + Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), + Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), + Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), + Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), + Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) + ); + } @Test public void testWithEmptyArray() { From 3104b1150fbc0152b3c634cb1cbd95f0fe280056 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:18:53 +0530 Subject: [PATCH 12/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index fe6d89c613d5..187c3b7215ec 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -19,22 +19,11 @@ public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) } private static Stream provideArraysForStalinSort() { - return Stream.of( - Arguments.of(new Integer[] {4}, new Integer[] {4}), - Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), - Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), - Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), - Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), - Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), - Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), - Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), - Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) - ); + return Stream.of(Arguments.of(new Integer[] {4}, new Integer[] {4}), Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); } @Test From efccc4ac7d5ed8b3a0ad2942ea745be6cd200272 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:20:20 +0530 Subject: [PATCH 13/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 187c3b7215ec..b0797d327592 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -19,12 +19,24 @@ public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) } private static Stream provideArraysForStalinSort() { - return Stream.of(Arguments.of(new Integer[] {4}, new Integer[] {4}), Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); - } + return Stream.of( + Arguments.of(new Integer[] {4}, new Integer[] {4}), + Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), + Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), + Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), + Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), + Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), + Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), + Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), + Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), + Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) + ); +} + @Test public void testWithEmptyArray() { From 10f97f00e27a53b73c6c753f103b72b88d2e73e6 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:24:07 +0530 Subject: [PATCH 14/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index b0797d327592..390ae70f6835 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -19,24 +19,23 @@ public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) } private static Stream provideArraysForStalinSort() { - return Stream.of( - Arguments.of(new Integer[] {4}, new Integer[] {4}), - Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), - Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), - Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), - Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), - Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), - Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), - Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), - Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) - ); -} - + return Stream.of( + Arguments.of(new Integer[] {4}, new Integer[] {4}), + Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), + Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), + Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), + Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), + Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), + Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), + Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), + Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), + Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) + ); + } @Test public void testWithEmptyArray() { @@ -62,3 +61,4 @@ public void testWithMixedDataTypes() { }); } } + From 9722f7fc80789fda637ba8c96a0cd5123db8c61f Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:28:42 +0530 Subject: [PATCH 15/53] Update StalinSortTest.java --- src/test/java/com/thealgorithms/sorts/StalinSortTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 390ae70f6835..56818de84e0d 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -15,7 +15,8 @@ public class StalinSortTest { @MethodSource("provideArraysForStalinSort") public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) { StalinSort stalinSort = new StalinSort(); - assertArrayEquals(expectedArray, stalinSort.sort(inputArray)); + // Explicitly call the sort method that accepts arrays + assertArrayEquals(expectedArray, stalinSort.sort((Comparable[]) inputArray)); } private static Stream provideArraysForStalinSort() { @@ -61,4 +62,3 @@ public void testWithMixedDataTypes() { }); } } - From 6acf62125b65d358a94c9e7835e44d31fe3c1c51 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:36:50 +0530 Subject: [PATCH 16/53] Update StalinSort.java --- .../com/thealgorithms/sorts/StalinSort.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index 01558a55fd00..c5687b82db30 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -1,12 +1,10 @@ package com.thealgorithms.sorts; -/** - * @author Anant Jain (https://github.com/anant-jain01) - * @see https://medium.com/@kaweendra/the-ultimate-sorting-algorithm-6513d6968420 - */ -public class StalinSort implements SortAlgorithm { +import java.util.Arrays; +public class StalinSort implements SortAlgorithm { public > T[] sort(T[] array) { + validateInput(array); int currentIndex = 0; for (int i = 1; i < array.length; i++) { @@ -16,26 +14,23 @@ public > T[] sort(T[] array) { } } - // Create a result array with sorted elements T[] result = (T[]) new Comparable[currentIndex + 1]; System.arraycopy(array, 0, result, 0, currentIndex + 1); - return result; } - // Driver Program + private void validateInput(final Comparable[] array) { + if (array.length == 0) { + throw new IllegalArgumentException("Input array must not be empty."); + } + } + public static void main(String[] args) { - // Integer Input Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - StalinSort stalinSort = new StalinSort(); - - // print a sorted array SortUtils.print(stalinSort.sort(integers)); - - // String Input + String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(stalinSort.sort(strings)); } } From eebe41cd3e6608d027fde9d5a1c0b4e09ef41411 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:37:56 +0530 Subject: [PATCH 17/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 66 ++++++------------- 1 file changed, 19 insertions(+), 47 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 56818de84e0d..a30d284c09f8 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -1,64 +1,36 @@ package com.thealgorithms.sorts; import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.params.provider.Arguments.arguments; import java.util.stream.Stream; -import org.junit.jupiter.api.Test; + import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -public class StalinSortTest { - +class StalinSortTest { @ParameterizedTest @MethodSource("provideArraysForStalinSort") - public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) { - StalinSort stalinSort = new StalinSort(); - // Explicitly call the sort method that accepts arrays - assertArrayEquals(expectedArray, stalinSort.sort((Comparable[]) inputArray)); + void testStalinSort(Integer[] input, Integer[] expected) { + assertArrayEquals(expected, new StalinSort().sort(input)); } private static Stream provideArraysForStalinSort() { return Stream.of( - Arguments.of(new Integer[] {4}, new Integer[] {4}), - Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), - Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), - Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), - Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), - Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), - Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), - Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), - Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) + arguments(new Integer[] {4}, new Integer[] {4}), + arguments(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), + arguments(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), + arguments(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), + arguments(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), + arguments(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), + arguments(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), + arguments(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), + arguments(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), + arguments(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), + arguments(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), + arguments(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), + arguments(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), + arguments(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) ); } - - @Test - public void testWithEmptyArray() { - StalinSort stalinSort = new StalinSort(); - Integer[] inputArray = {}; - Integer[] expectedArray = {}; - assertArrayEquals(expectedArray, stalinSort.sort(inputArray)); - } - - @Test - public void testWithNullValues() { - assertThrows(NullPointerException.class, () -> { - StalinSort stalinSort = new StalinSort(); - stalinSort.sort(null); - }); - } - - @Test - public void testWithMixedDataTypes() { - assertThrows(ClassCastException.class, () -> { - StalinSort stalinSort = new StalinSort(); - stalinSort.sort(new Comparable[] {"a", 1}); - }); - } } From 00a6f7809d19b3b8f47357facbf86df87aa2f6da Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:42:58 +0530 Subject: [PATCH 18/53] Update StalinSortTest.java --- .../com/thealgorithms/sorts/StalinSortTest.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index a30d284c09f8..eadbc1bde9e1 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -1,6 +1,3 @@ -package com.thealgorithms.sorts; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.params.provider.Arguments.arguments; import java.util.stream.Stream; @@ -9,15 +6,17 @@ import org.junit.jupiter.params.provider.MethodSource; class StalinSortTest { + @ParameterizedTest @MethodSource("provideArraysForStalinSort") void testStalinSort(Integer[] input, Integer[] expected) { - assertArrayEquals(expected, new StalinSort().sort(input)); + StalinSort stalinSort = new StalinSort(); + Integer[] sortedArray = stalinSort.sort(input); + assertArrayEquals(expected, sortedArray); } private static Stream provideArraysForStalinSort() { - return Stream.of( - arguments(new Integer[] {4}, new Integer[] {4}), + return Stream.of(arguments(new Integer[] {4}, new Integer[] {4}), arguments(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), arguments(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), arguments(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), @@ -30,7 +29,6 @@ private static Stream provideArraysForStalinSort() { arguments(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), arguments(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), arguments(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - arguments(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) - ); + arguments(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); } } From 4e4213716663179eb14cbf5464296f05d5f24153 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:43:21 +0530 Subject: [PATCH 19/53] Update StalinSort.java --- .../java/com/thealgorithms/sorts/StalinSort.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index c5687b82db30..2faca2fa317b 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -1,10 +1,12 @@ package com.thealgorithms.sorts; -import java.util.Arrays; - +/** + * @author Anant Jain (https://github.com/anant-jain01) + * @see https://medium.com/@kaweendra/the-ultimate-sorting-algorithm-6513d6968420 + */ public class StalinSort implements SortAlgorithm { + public > T[] sort(T[] array) { - validateInput(array); int currentIndex = 0; for (int i = 1; i < array.length; i++) { @@ -19,12 +21,6 @@ public > T[] sort(T[] array) { return result; } - private void validateInput(final Comparable[] array) { - if (array.length == 0) { - throw new IllegalArgumentException("Input array must not be empty."); - } - } - public static void main(String[] args) { Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; StalinSort stalinSort = new StalinSort(); From a022b6a605927b6356de30e8c73d37690815b320 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:44:56 +0530 Subject: [PATCH 20/53] Update pom.xml --- pom.xml | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/pom.xml b/pom.xml index dafceb65a7f1..1ddfb5810101 100644 --- a/pom.xml +++ b/pom.xml @@ -30,14 +30,12 @@ org.junit.jupiter - junit-jupiter - 5.11.2 + junit-jupiter-api test org.junit.jupiter junit-jupiter-engine - 5.11.2 test @@ -46,13 +44,6 @@ ${assertj.version} test - - - org.junit.jupiter - junit-jupiter-api - 5.11.2 - test - org.apache.commons commons-lang3 @@ -67,17 +58,10 @@ - - maven-surefire-plugin - 3.5.1 - - - - org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.10.1 21 21 @@ -91,6 +75,13 @@ + + maven-surefire-plugin + 3.0.0-M5 + + + + org.jacoco jacoco-maven-plugin @@ -122,9 +113,9 @@ - com.puppycrawl.tools - checkstyle - 10.18.2 + com.puppycrawl.tools + checkstyle + 10.18.2 From 3d7b1b60bd6fb237439cddaed3eeee9e8fb20256 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:50:01 +0530 Subject: [PATCH 21/53] Update StalinSort.java --- src/main/java/com/thealgorithms/sorts/StalinSort.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index 2faca2fa317b..01558a55fd00 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -16,17 +16,26 @@ public > T[] sort(T[] array) { } } + // Create a result array with sorted elements T[] result = (T[]) new Comparable[currentIndex + 1]; System.arraycopy(array, 0, result, 0, currentIndex + 1); + return result; } + // Driver Program public static void main(String[] args) { + // Integer Input Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + StalinSort stalinSort = new StalinSort(); + + // print a sorted array SortUtils.print(stalinSort.sort(integers)); - + + // String Input String[] strings = {"c", "a", "e", "b", "d"}; + SortUtils.print(stalinSort.sort(strings)); } } From e6f271adfc0f4c1aab7875fb1c691498bc4fd7dc Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:51:16 +0530 Subject: [PATCH 22/53] Update StalinSortTest.java --- .../thealgorithms/sorts/StalinSortTest.java | 70 ++++++++++++------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index eadbc1bde9e1..0a7586553206 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -1,34 +1,52 @@ -import static org.junit.jupiter.params.provider.Arguments.arguments; +package com.thealgorithms.sorts; -import java.util.stream.Stream; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; +public class StalinSortTest { -class StalinSortTest { - - @ParameterizedTest - @MethodSource("provideArraysForStalinSort") - void testStalinSort(Integer[] input, Integer[] expected) { + @Test + public void testSortIntegers() { StalinSort stalinSort = new StalinSort(); - Integer[] sortedArray = stalinSort.sort(input); - assertArrayEquals(expected, sortedArray); + Integer[] input = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + Integer[] expected = {4, 23, 78, 231}; + Integer[] result = stalinSort.sort(input); + assertArrayEquals(expected, result); } - private static Stream provideArraysForStalinSort() { - return Stream.of(arguments(new Integer[] {4}, new Integer[] {4}), - arguments(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), - arguments(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), - arguments(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), - arguments(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), - arguments(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), - arguments(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), - arguments(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), - arguments(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), - arguments(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), - arguments(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), - arguments(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), - arguments(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), - arguments(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500})); + @Test + public void testSortStrings() { + StalinSort stalinSort = new StalinSort(); + String[] input = {"c", "a", "e", "b", "d"}; + String[] expected = {"a", "b", "c", "d", "e"}; + String[] result = stalinSort.sort(input); + assertArrayEquals(expected, result); + } + + @Test + public void testSortWithDuplicates() { + StalinSort stalinSort = new StalinSort(); + Integer[] input = {1, 3, 2, 2, 5, 4}; + Integer[] expected = {1, 2, 5}; + Integer[] result = stalinSort.sort(input); + assertArrayEquals(expected, result); + } + + @Test + public void testSortEmptyArray() { + StalinSort stalinSort = new StalinSort(); + Integer[] input = {}; + Integer[] expected = {}; + Integer[] result = stalinSort.sort(input); + assertArrayEquals(expected, result); + } + + @Test + public void testSortSingleElement() { + StalinSort stalinSort = new StalinSort(); + Integer[] input = {42}; + Integer[] expected = {42}; + Integer[] result = stalinSort.sort(input); + assertArrayEquals(expected, result); } } From fceee06ea96d1572eb5369b3317e315fd735df88 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:52:56 +0530 Subject: [PATCH 23/53] Update pom.xml --- pom.xml | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index 1ddfb5810101..673be6cd4e36 100644 --- a/pom.xml +++ b/pom.xml @@ -30,12 +30,8 @@ org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine + junit-jupiter + 5.11.2 test @@ -44,6 +40,13 @@ ${assertj.version} test + + + org.junit.jupiter + junit-jupiter-api + 5.11.2 + test + org.apache.commons commons-lang3 @@ -58,10 +61,17 @@ + + maven-surefire-plugin + 3.5.1 + + + + org.apache.maven.plugins maven-compiler-plugin - 3.10.1 + 3.13.0 21 21 @@ -75,13 +85,6 @@ - - maven-surefire-plugin - 3.0.0-M5 - - - - org.jacoco jacoco-maven-plugin @@ -113,9 +116,9 @@ - com.puppycrawl.tools - checkstyle - 10.18.2 + com.puppycrawl.tools + checkstyle + 10.18.2 From c650a9b0024d99fd7c00002f565bd345ac273d60 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:59:36 +0530 Subject: [PATCH 24/53] Update pom.xml --- pom.xml | 232 +++++++++++++++++++------------------------------------- 1 file changed, 77 insertions(+), 155 deletions(-) diff --git a/pom.xml b/pom.xml index 673be6cd4e36..c53b057c881d 100644 --- a/pom.xml +++ b/pom.xml @@ -1,159 +1,81 @@ - - - 4.0.0 - com.thealgorithms - Java - 1.0-SNAPSHOT - jar + + + org.junit.jupiter + junit-jupiter + 5.11.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.11.2 + test + + + org.apache.commons + commons-lang3 + 3.12.0 + + + org.assertj + assertj-core + 3.21.0 + test + + - - UTF-8 - 21 - 21 - 3.26.3 - - - - - - org.junit - junit-bom - 5.11.2 - pom - import - - - - - - - org.junit.jupiter - junit-jupiter - 5.11.2 - test - - - org.assertj - assertj-core - ${assertj.version} - test - - - - org.junit.jupiter - junit-jupiter-api - 5.11.2 - test - - - org.apache.commons - commons-lang3 - 3.17.0 - - - org.apache.commons - commons-collections4 - 4.5.0-M2 - - - - - - - maven-surefire-plugin - 3.5.1 - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - 21 - 21 - - -Xlint:all - -Xlint:-auxiliaryclass - -Xlint:-rawtypes - -Xlint:-unchecked - -Xlint:-lossy-conversions - -Werror - - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - - prepare-agent - - - - generate-code-coverage-report - test - - report - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.5.0 - - checkstyle.xml - true - true - warning - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + 21 + 21 + + -Xlint:unchecked + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.1 + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.8 + + + + prepare-agent + + + + report + test + + report + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + com.puppycrawl.tools checkstyle 10.18.2 - - - - - com.github.spotbugs - spotbugs-maven-plugin - 4.8.6.4 - - spotbugs-exclude.xml - true - - - com.mebigfatguy.fb-contrib - fb-contrib - 7.6.5 - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.13.0 - - - - - - org.apache.maven.plugins - maven-pmd-plugin - 3.25.0 - - true - true - false - pmd-exclude.properties - - - - - + + + + + From b84af74482ec46f9ad1944856b96a64335ffebd2 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:00:03 +0530 Subject: [PATCH 25/53] Update StalinSortTest.java --- src/test/java/com/thealgorithms/sorts/StalinSortTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 0a7586553206..5af5b6342fd8 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -9,7 +9,7 @@ public class StalinSortTest { public void testSortIntegers() { StalinSort stalinSort = new StalinSort(); Integer[] input = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - Integer[] expected = {4, 23, 78, 231}; + Integer[] expected = {4, 23, 78, 231}; Integer[] result = stalinSort.sort(input); assertArrayEquals(expected, result); } @@ -27,7 +27,7 @@ public void testSortStrings() { public void testSortWithDuplicates() { StalinSort stalinSort = new StalinSort(); Integer[] input = {1, 3, 2, 2, 5, 4}; - Integer[] expected = {1, 2, 5}; + Integer[] expected = {1, 2, 5}; Integer[] result = stalinSort.sort(input); assertArrayEquals(expected, result); } @@ -36,7 +36,7 @@ public void testSortWithDuplicates() { public void testSortEmptyArray() { StalinSort stalinSort = new StalinSort(); Integer[] input = {}; - Integer[] expected = {}; + Integer[] expected = {}; Integer[] result = stalinSort.sort(input); assertArrayEquals(expected, result); } From d0b71135e352c3848f126e6be9232b14c6416c29 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:01:04 +0530 Subject: [PATCH 26/53] Update StalinSort.java --- .../com/thealgorithms/sorts/StalinSort.java | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index 01558a55fd00..738f1844ed9c 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -1,14 +1,16 @@ package com.thealgorithms.sorts; - /** * @author Anant Jain (https://github.com/anant-jain01) * @see https://medium.com/@kaweendra/the-ultimate-sorting-algorithm-6513d6968420 - */ + **/ public class StalinSort implements SortAlgorithm { - + @SuppressWarnings("unchecked") public > T[] sort(T[] array) { - int currentIndex = 0; + if (array.length == 0) { + return array; + } + int currentIndex = 0; for (int i = 1; i < array.length; i++) { if (array[i].compareTo(array[currentIndex]) >= 0) { currentIndex++; @@ -16,26 +18,16 @@ public > T[] sort(T[] array) { } } - // Create a result array with sorted elements - T[] result = (T[]) new Comparable[currentIndex + 1]; + T[] result = (T[]) java.lang.reflect.Array.newInstance(array.getClass().getComponentType(), currentIndex + 1); System.arraycopy(array, 0, result, 0, currentIndex + 1); - return result; } - // Driver Program public static void main(String[] args) { - // Integer Input Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - StalinSort stalinSort = new StalinSort(); - - // print a sorted array SortUtils.print(stalinSort.sort(integers)); - - // String Input String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(stalinSort.sort(strings)); } } From 490b879d9eb19ebe8fe25d439c1c401d5413c16b Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:03:08 +0530 Subject: [PATCH 27/53] Update pom.xml --- pom.xml | 170 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 90 insertions(+), 80 deletions(-) diff --git a/pom.xml b/pom.xml index c53b057c881d..94043b95d636 100644 --- a/pom.xml +++ b/pom.xml @@ -1,81 +1,91 @@ - - - org.junit.jupiter - junit-jupiter - 5.11.2 - test - - - org.junit.jupiter - junit-jupiter-engine - 5.11.2 - test - - - org.apache.commons - commons-lang3 - 3.12.0 - - - org.assertj - assertj-core - 3.21.0 - test - - + + 4.0.0 - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.10.1 - - 21 - 21 - - -Xlint:unchecked - - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.5.1 - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.8 - - - - prepare-agent - - - - report - test - - report - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.1.2 - - - com.puppycrawl.tools - checkstyle - 10.18.2 - - - - - + com.thealgorithms + Java + 1.0-SNAPSHOT + + + + org.junit.jupiter + junit-jupiter + 5.11.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.11.2 + test + + + org.apache.commons + commons-lang3 + 3.12.0 + + + org.assertj + assertj-core + 3.21.0 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + 21 + 21 + + -Xlint:unchecked + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.1 + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.8 + + + + prepare-agent + + + + report + test + + report + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + + com.puppycrawl.tools + checkstyle + 10.18.2 + + + + + + From 08aae773ce3e802fc5375e03197769fb4099b2ca Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:05:14 +0530 Subject: [PATCH 28/53] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 94043b95d636..92b5f75a6aa6 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.junit.jupiter - junit-jupiter + junit-jupiter-api 5.11.2 test From 9926906dcc4447f170b312ebedbbbd23d2338ca9 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:06:48 +0530 Subject: [PATCH 29/53] Update StalinSortTest.java --- src/test/java/com/thealgorithms/sorts/StalinSortTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 5af5b6342fd8..2ab9bfa3c00c 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -1,7 +1,7 @@ package com.thealgorithms.sorts; -import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import org.junit.jupiter.api.Test; public class StalinSortTest { From 6cdebe2dd31e55ea91414d8c0e7d7ac61f93ee5b Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:07:20 +0530 Subject: [PATCH 30/53] Update StalinSort.java --- src/main/java/com/thealgorithms/sorts/StalinSort.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index 738f1844ed9c..9d1dc61fc30b 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -18,15 +18,20 @@ public > T[] sort(T[] array) { } } + // Create a result array with sorted elements T[] result = (T[]) java.lang.reflect.Array.newInstance(array.getClass().getComponentType(), currentIndex + 1); System.arraycopy(array, 0, result, 0, currentIndex + 1); return result; } + // Driver Program public static void main(String[] args) { + // Integer Input Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; StalinSort stalinSort = new StalinSort(); + // print a sorted array SortUtils.print(stalinSort.sort(integers)); + // String Input String[] strings = {"c", "a", "e", "b", "d"}; SortUtils.print(stalinSort.sort(strings)); } From 4e6a279c980ffb48a2f32296e21407d78f874efc Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:09:22 +0530 Subject: [PATCH 31/53] Update StalinSortTest.java From c4982a025a03fb6a8b5a4c37eb22fc9d07f50be5 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:23:46 +0530 Subject: [PATCH 32/53] Update pom.xml --- pom.xml | 175 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 86 insertions(+), 89 deletions(-) diff --git a/pom.xml b/pom.xml index 92b5f75a6aa6..78391d19a08f 100644 --- a/pom.xml +++ b/pom.xml @@ -1,91 +1,88 @@ - 4.0.0 - - com.thealgorithms - Java - 1.0-SNAPSHOT - - - - org.junit.jupiter - junit-jupiter-api - 5.11.2 - test - - - org.junit.jupiter - junit-jupiter-engine - 5.11.2 - test - - - org.apache.commons - commons-lang3 - 3.12.0 - - - org.assertj - assertj-core - 3.21.0 - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.10.1 - - 21 - 21 - - -Xlint:unchecked - - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.5.1 - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.8 - - - - prepare-agent - - - - report - test - - report - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.1.2 - - - com.puppycrawl.tools - checkstyle - 10.18.2 - - - - - +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +4.0.0 +com.thealgorithms +Java +1.0-SNAPSHOT + + +org.junit.jupiter +junit-jupiter-api +5.11.2 +test + + +org.junit.jupiter +junit-jupiter-engine +5.11.2 +test + + +org.apache.commons +commons-lang3 +3.12.0 + + +org.assertj +assertj-core +3.21.0 +test + + + + + +org.apache.maven.plugins +maven-compiler-plugin +3.10.1 + +21 +21 + +-Xlint:unchecked + + + + +org.apache.maven.plugins +maven-surefire-plugin +3.5.1 + + + + + +org.jacoco +jacoco-maven-plugin +0.8.8 + + + +prepare-agent + + + +report +test + +report + + + + + +org.apache.maven.plugins +maven-checkstyle-plugin +3.1.2 + + +com.puppycrawl.tools +checkstyle +10.18.2 + + + + + From 2f1a6ff65b6c54fe7700edac90065cae5afdcf59 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:27:02 +0530 Subject: [PATCH 33/53] Update StalinSortTest.java --- src/test/java/com/thealgorithms/sorts/StalinSortTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 2ab9bfa3c00c..b34c18d90597 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.sorts; import static org.junit.jupiter.api.Assertions.assertArrayEquals; + import org.junit.jupiter.api.Test; public class StalinSortTest { From 9c1f40f827d0bcb81ee357b1722915a4d29036fd Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:28:07 +0530 Subject: [PATCH 34/53] Update pom.xml --- pom.xml | 232 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 145 insertions(+), 87 deletions(-) diff --git a/pom.xml b/pom.xml index 78391d19a08f..9b27b9053d99 100644 --- a/pom.xml +++ b/pom.xml @@ -1,88 +1,146 @@ -4.0.0 -com.thealgorithms -Java -1.0-SNAPSHOT - - -org.junit.jupiter -junit-jupiter-api -5.11.2 -test - - -org.junit.jupiter -junit-jupiter-engine -5.11.2 -test - - -org.apache.commons -commons-lang3 -3.12.0 - - -org.assertj -assertj-core -3.21.0 -test - - - - - -org.apache.maven.plugins -maven-compiler-plugin -3.10.1 - -21 -21 - --Xlint:unchecked - - - - -org.apache.maven.plugins -maven-surefire-plugin -3.5.1 - - - - - -org.jacoco -jacoco-maven-plugin -0.8.8 - - - -prepare-agent - - - -report -test - -report - - - - - -org.apache.maven.plugins -maven-checkstyle-plugin -3.1.2 - - -com.puppycrawl.tools -checkstyle -10.18.2 - - - - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + jar + + + UTF-8 + 21 + 21 + 3.26.3 + + + + + + org.junit + junit-bom + 5.11.2 + pom + import + + + + + + + org.junit.jupiter + junit-jupiter-api + 5.11.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.11.2 + test + + + org.apache.commons + commons-lang3 + 3.12.0 + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.apache.commons + commons-collections4 + 4.4 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + 21 + 21 + + -Xlint:unchecked + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.1 + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.8 + + + + prepare-agent + + + + report + test + + report + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + checkstyle.xml + true + true + warning + + + + com.puppycrawl.tools + checkstyle + 10.18.2 + + + + + com.github.spotbugs + spotbugs-maven-plugin + 4.8.6.4 + + spotbugs-exclude.xml + true + + + com.mebigfatguy.fb-contrib + fb-contrib + 7.6.5 + + + com.h3xstream.findsecbugs + findsecbugs-plugin + 1.13.0 + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.25.0 + + true + true + false + pmd-exclude.properties + From 6952bb1aa48b6302d349595e26f543da32247d6a Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:30:18 +0530 Subject: [PATCH 35/53] Update pom.xml --- pom.xml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 9b27b9053d99..ab458d54e468 100644 --- a/pom.xml +++ b/pom.xml @@ -2,8 +2,10 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + com.thealgorithms + Java + 1.0-SNAPSHOT jar - UTF-8 21 @@ -47,11 +49,6 @@ ${assertj.version} test - - org.apache.commons - commons-collections4 - 4.4 - @@ -144,3 +141,7 @@ false pmd-exclude.properties + + + + From f740fdebc32faef2bb325f6ee213a9d07ec7a169 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:30:51 +0530 Subject: [PATCH 36/53] Update pom.xml --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index ab458d54e468..44e78fc76827 100644 --- a/pom.xml +++ b/pom.xml @@ -6,6 +6,7 @@ Java 1.0-SNAPSHOT jar + UTF-8 21 From daf86c214b4454c29b885e9a42467de7e0e7b914 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:32:36 +0530 Subject: [PATCH 37/53] Update StalinSort.java --- src/main/java/com/thealgorithms/sorts/StalinSort.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index 9d1dc61fc30b..6f644e4ee0d0 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -1,8 +1,5 @@ package com.thealgorithms.sorts; -/** - * @author Anant Jain (https://github.com/anant-jain01) - * @see https://medium.com/@kaweendra/the-ultimate-sorting-algorithm-6513d6968420 - **/ + public class StalinSort implements SortAlgorithm { @SuppressWarnings("unchecked") public > T[] sort(T[] array) { From c0ad91f68bf82f1b8a679503d82b24f95734b9e0 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:34:06 +0530 Subject: [PATCH 38/53] Update pom.xml --- pom.xml | 61 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index 44e78fc76827..673be6cd4e36 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,7 @@ + + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.thealgorithms Java @@ -29,55 +30,65 @@ org.junit.jupiter - junit-jupiter-api + junit-jupiter 5.11.2 test + + org.assertj + assertj-core + ${assertj.version} + test + + org.junit.jupiter - junit-jupiter-engine + junit-jupiter-api 5.11.2 test org.apache.commons commons-lang3 - 3.12.0 + 3.17.0 - org.assertj - assertj-core - ${assertj.version} - test + org.apache.commons + commons-collections4 + 4.5.0-M2 + + maven-surefire-plugin + 3.5.1 + + + + org.apache.maven.plugins maven-compiler-plugin - 3.10.1 + 3.13.0 21 21 - -Xlint:unchecked + -Xlint:all + -Xlint:-auxiliaryclass + -Xlint:-rawtypes + -Xlint:-unchecked + -Xlint:-lossy-conversions + -Werror - - org.apache.maven.plugins - maven-surefire-plugin - 3.5.1 - - - - org.jacoco jacoco-maven-plugin - 0.8.8 + 0.8.12 @@ -85,7 +96,7 @@ - report + generate-code-coverage-report test report @@ -96,7 +107,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.1.2 + 3.5.0 checkstyle.xml true @@ -105,9 +116,9 @@ - com.puppycrawl.tools - checkstyle - 10.18.2 + com.puppycrawl.tools + checkstyle + 10.18.2 From dc274b687bce2f92980bcb01c98dc0db5bb99ecc Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:38:56 +0530 Subject: [PATCH 39/53] Update StalinSortTest.java --- src/test/java/com/thealgorithms/sorts/StalinSortTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index b34c18d90597..301cc20eeb1c 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -1,7 +1,6 @@ package com.thealgorithms.sorts; import static org.junit.jupiter.api.Assertions.assertArrayEquals; - import org.junit.jupiter.api.Test; public class StalinSortTest { @@ -19,7 +18,7 @@ public void testSortIntegers() { public void testSortStrings() { StalinSort stalinSort = new StalinSort(); String[] input = {"c", "a", "e", "b", "d"}; - String[] expected = {"a", "b", "c", "d", "e"}; + String[] expected = {"c", "e"}; String[] result = stalinSort.sort(input); assertArrayEquals(expected, result); } @@ -28,7 +27,7 @@ public void testSortStrings() { public void testSortWithDuplicates() { StalinSort stalinSort = new StalinSort(); Integer[] input = {1, 3, 2, 2, 5, 4}; - Integer[] expected = {1, 2, 5}; + Integer[] expected = {1, 3, 5}; Integer[] result = stalinSort.sort(input); assertArrayEquals(expected, result); } From 822dbe829f94ab430765e69c1d9267e6eacb71e2 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:39:54 +0530 Subject: [PATCH 40/53] Update StalinSortTest.java --- src/test/java/com/thealgorithms/sorts/StalinSortTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java index 301cc20eeb1c..ee9c61379527 100644 --- a/src/test/java/com/thealgorithms/sorts/StalinSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/StalinSortTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.sorts; import static org.junit.jupiter.api.Assertions.assertArrayEquals; + import org.junit.jupiter.api.Test; public class StalinSortTest { From 9b485b78920d4da729a905275811231d31f8c256 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:48:58 +0530 Subject: [PATCH 41/53] Create AdaptiveMergeSort.java --- .../sorts/AdaptiveMergeSort.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java new file mode 100644 index 000000000000..9d17b9495907 --- /dev/null +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -0,0 +1,50 @@ +package com.thealgorithms.sorts; + +public class AdaptiveMergeSort implements SortAlgorithm { + + @SuppressWarnings("unchecked") + public > T[] sort(T[] array) { + if (array.length <= 1) { + return array; + } + T[] aux = array.clone(); + sort(array, aux, 0, array.length - 1); + return array; + } + + private > void sort(T[] array, T[] aux, int low, int high) { + if (low >= high) { + return; + } + int mid = low + (high - low) / 2; + sort(array, aux, low, mid); + sort(array, aux, mid + 1, high); + merge(array, aux, low, mid, high); + } + + private > void merge(T[] array, T[] aux, int low, int mid, int high) { + for (int k = low; k <= high; k++) { + aux[k] = array[k]; + } + + int i = low, j = mid + 1; + for (int k = low; k <= high; k++) { + if (i > mid) array[k] = aux[j++]; + else if (j > high) array[k] = aux[i++]; + else if (aux[j].compareTo(aux[i]) < 0) array[k] = aux[j++]; + else array[k] = aux[i++]; + } + } + + public static void main(String[] args) { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + SortUtils.print(adaptiveMergeSort.sort(integers)); + + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; + SortUtils.print(adaptiveMergeSort.sort(strings)); + } +} From 520792b0b24289ab00836cf96aeb8870237b0043 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:49:34 +0530 Subject: [PATCH 42/53] Create AdaptiveMergeSortTest.java --- .../sorts/AdaptiveMergeSortTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java diff --git a/src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java b/src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java new file mode 100644 index 000000000000..c519cfe3928a --- /dev/null +++ b/src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java @@ -0,0 +1,52 @@ +package com.thealgorithms.sorts; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import org.junit.jupiter.api.Test; + +public class AdaptiveMergeSortTest { + + @Test + public void testSortIntegers() { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + Integer[] input = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + Integer[] expected = {1, 4, 6, 9, 12, 23, 54, 78, 231}; + Integer[] result = adaptiveMergeSort.sort(input); + assertArrayEquals(expected, result); + } + + @Test + public void testSortStrings() { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + String[] input = {"c", "a", "e", "b", "d"}; + String[] expected = {"a", "b", "c", "d", "e"}; + String[] result = adaptiveMergeSort.sort(input); + assertArrayEquals(expected, result); + } + + @Test + public void testSortWithDuplicates() { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + Integer[] input = {1, 3, 2, 2, 5, 4}; + Integer[] expected = {1, 2, 2, 3, 4, 5}; + Integer[] result = adaptiveMergeSort.sort(input); + assertArrayEquals(expected, result); + } + + @Test + public void testSortEmptyArray() { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + Integer[] input = {}; + Integer[] expected = {}; + Integer[] result = adaptiveMergeSort.sort(input); + assertArrayEquals(expected, result); + } + + @Test + public void testSortSingleElement() { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + Integer[] input = {42}; + Integer[] expected = {42}; + Integer[] result = adaptiveMergeSort.sort(input); + assertArrayEquals(expected, result); + } +} From 51172f7acec9c1254e7d016d401686b9d5f6a0e6 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:52:04 +0530 Subject: [PATCH 43/53] Update AdaptiveMergeSort.java --- .../java/com/thealgorithms/sorts/AdaptiveMergeSort.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 9d17b9495907..0d7a68037bc7 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -1,5 +1,12 @@ package com.thealgorithms.sorts; - + + public static void main(String[] args) { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); +- ++ + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + SortUtils.print(adaptiveMergeSort.sort(integers)); public class AdaptiveMergeSort implements SortAlgorithm { @SuppressWarnings("unchecked") From 877050292e9496276f97bb5a1b27bbfd387c7bb4 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:58:51 +0530 Subject: [PATCH 44/53] Update AdaptiveMergeSort.java --- .../sorts/AdaptiveMergeSort.java | 30 +++++++------------ 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 0d7a68037bc7..6277f5bace4c 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -1,12 +1,5 @@ package com.thealgorithms.sorts; - - public static void main(String[] args) { - AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); -- -+ - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - SortUtils.print(adaptiveMergeSort.sort(integers)); + public class AdaptiveMergeSort implements SortAlgorithm { @SuppressWarnings("unchecked") @@ -43,15 +36,14 @@ private > void merge(T[] array, T[] aux, int low, int mi } } - public static void main(String[] args) { - AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); - - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - SortUtils.print(adaptiveMergeSort.sort(integers)); + public static void main(String[] args) { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(adaptiveMergeSort.sort(strings)); - } -} + + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + SortUtils.print(adaptiveMergeSort.sort(integers)); + + String[] strings = {"c", "a", "e", "b", "d"}; + SortUtils.print(adaptiveMergeSort.sort(strings)); + } + } From 19f83d9dd89300db97002a4a8ff92f1e6f6dfd50 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:00:22 +0530 Subject: [PATCH 45/53] Update AdaptiveMergeSortTest.java --- src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java b/src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java index c519cfe3928a..9d94b165d81b 100644 --- a/src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/AdaptiveMergeSortTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.sorts; import static org.junit.jupiter.api.Assertions.assertArrayEquals; + import org.junit.jupiter.api.Test; public class AdaptiveMergeSortTest { From 31c386a4a797191150a6e50e654c33eda1e40d46 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:02:30 +0530 Subject: [PATCH 46/53] Update AdaptiveMergeSort.java --- .../sorts/AdaptiveMergeSort.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 6277f5bace4c..30693eb7fe61 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -29,21 +29,24 @@ private > void merge(T[] array, T[] aux, int low, int mi int i = low, j = mid + 1; for (int k = low; k <= high; k++) { - if (i > mid) array[k] = aux[j++]; - else if (j > high) array[k] = aux[i++]; - else if (aux[j].compareTo(aux[i]) < 0) array[k] = aux[j++]; - else array[k] = aux[i++]; + if (i > mid) + array[k] = aux[j++]; + else if (j > high) + array[k] = aux[i++]; + else if (aux[j].compareTo(aux[i]) < 0) + array[k] = aux[j++]; + else + array[k] = aux[i++]; } } - public static void main(String[] args) { - AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + public static void main(String[] args) { + AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + SortUtils.print(adaptiveMergeSort.sort(integers)); - - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - SortUtils.print(adaptiveMergeSort.sort(integers)); - - String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(adaptiveMergeSort.sort(strings)); - } - } + String[] strings = {"c", "a", "e", "b", "d"}; + SortUtils.print(adaptiveMergeSort.sort(strings)); + } +} From 428f96e0f514063c2856067c3eeb7a42f2b30198 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:04:33 +0530 Subject: [PATCH 47/53] Update AdaptiveMergeSort.java --- src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 30693eb7fe61..1c6deae11df6 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -42,7 +42,7 @@ else if (aux[j].compareTo(aux[i]) < 0) public static void main(String[] args) { AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); - + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; SortUtils.print(adaptiveMergeSort.sort(integers)); From 0a550c1dc168d53bd445adf62c163057fdc93aaf Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:06:39 +0530 Subject: [PATCH 48/53] Update AdaptiveMergeSort.java --- src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 1c6deae11df6..4fada334e501 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -42,7 +42,6 @@ else if (aux[j].compareTo(aux[i]) < 0) public static void main(String[] args) { AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; SortUtils.print(adaptiveMergeSort.sort(integers)); From 44c28564379b0fccc1dab2558ce323a328d1fbcd Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:09:29 +0530 Subject: [PATCH 49/53] Update AdaptiveMergeSort.java --- .../thealgorithms/sorts/AdaptiveMergeSort.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 4fada334e501..6cd0c89dc79b 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -27,24 +27,29 @@ private > void merge(T[] array, T[] aux, int low, int mi aux[k] = array[k]; } - int i = low, j = mid + 1; + int i = low; + int j = mid + 1; for (int k = low; k <= high; k++) { - if (i > mid) + if (i > mid) { array[k] = aux[j++]; - else if (j > high) + } else if (j > high) { array[k] = aux[i++]; - else if (aux[j].compareTo(aux[i]) < 0) + } else if (aux[j].compareTo(aux[i]) < 0) { array[k] = aux[j++]; - else + } else { array[k] = aux[i++]; + } } } public static void main(String[] args) { AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); + + // Integer Input Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; SortUtils.print(adaptiveMergeSort.sort(integers)); + // String Input String[] strings = {"c", "a", "e", "b", "d"}; SortUtils.print(adaptiveMergeSort.sort(strings)); } From eacb7f299a8889ac5e99054b94110955f2ff54a2 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:14:05 +0530 Subject: [PATCH 50/53] Update AdaptiveMergeSort.java --- src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 6cd0c89dc79b..3b1a6c524320 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -44,7 +44,6 @@ private > void merge(T[] array, T[] aux, int low, int mi public static void main(String[] args) { AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); - // Integer Input Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; SortUtils.print(adaptiveMergeSort.sort(integers)); From 7cf4bdbf05060ab42b40e83fd6e637d91049aa41 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:19:53 +0530 Subject: [PATCH 51/53] Update AdaptiveMergeSort.java --- src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 3b1a6c524320..55286b56798c 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -23,9 +23,7 @@ private > void sort(T[] array, T[] aux, int low, int hig } private > void merge(T[] array, T[] aux, int low, int mid, int high) { - for (int k = low; k <= high; k++) { - aux[k] = array[k]; - } + System.arraycopy(array, low, aux, low, high - low + 1); int i = low; int j = mid + 1; From be7d4ff365370130197fbc1e726f4b0502e9cad8 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Tue, 15 Oct 2024 21:11:27 +0530 Subject: [PATCH 52/53] Update AdaptiveMergeSort.java --- .../com/thealgorithms/sorts/AdaptiveMergeSort.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java index 55286b56798c..2c71bae8b557 100644 --- a/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java +++ b/src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java @@ -1,7 +1,6 @@ package com.thealgorithms.sorts; public class AdaptiveMergeSort implements SortAlgorithm { - @SuppressWarnings("unchecked") public > T[] sort(T[] array) { if (array.length <= 1) { @@ -24,7 +23,6 @@ private > void sort(T[] array, T[] aux, int low, int hig private > void merge(T[] array, T[] aux, int low, int mid, int high) { System.arraycopy(array, low, aux, low, high - low + 1); - int i = low; int j = mid + 1; for (int k = low; k <= high; k++) { @@ -39,15 +37,4 @@ private > void merge(T[] array, T[] aux, int low, int mi } } } - - public static void main(String[] args) { - AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort(); - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - SortUtils.print(adaptiveMergeSort.sort(integers)); - - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(adaptiveMergeSort.sort(strings)); - } } From bff1ecbd9526ad3ace5b0db19a319d5d32ae6299 Mon Sep 17 00:00:00 2001 From: ANANT JAIN <139585700+anant-jain01@users.noreply.github.com> Date: Tue, 15 Oct 2024 21:12:06 +0530 Subject: [PATCH 53/53] Update StalinSort.java --- .../java/com/thealgorithms/sorts/StalinSort.java | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/StalinSort.java b/src/main/java/com/thealgorithms/sorts/StalinSort.java index 6f644e4ee0d0..5aaf530fd94c 100644 --- a/src/main/java/com/thealgorithms/sorts/StalinSort.java +++ b/src/main/java/com/thealgorithms/sorts/StalinSort.java @@ -6,7 +6,6 @@ public > T[] sort(T[] array) { if (array.length == 0) { return array; } - int currentIndex = 0; for (int i = 1; i < array.length; i++) { if (array[i].compareTo(array[currentIndex]) >= 0) { @@ -14,22 +13,9 @@ public > T[] sort(T[] array) { array[currentIndex] = array[i]; } } - // Create a result array with sorted elements T[] result = (T[]) java.lang.reflect.Array.newInstance(array.getClass().getComponentType(), currentIndex + 1); System.arraycopy(array, 0, result, 0, currentIndex + 1); return result; } - - // Driver Program - public static void main(String[] args) { - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - StalinSort stalinSort = new StalinSort(); - // print a sorted array - SortUtils.print(stalinSort.sort(integers)); - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(stalinSort.sort(strings)); - } }