From 15a8c6b6b20ce4a5ee4dedfbbb5df4f0f5fe73f7 Mon Sep 17 00:00:00 2001 From: Mohamad Jayyusi Date: Sat, 14 Sep 2019 18:41:10 -0400 Subject: [PATCH 1/2] Added CombSortTest.java copied over CombSort.java from master branch to Development branch. Added CombSortTest.java to Development branch --- src/main/java/com/sorts/CombSort.java | 61 ++++++++++++++++ src/test/java/com/sorts/CombSortTest.java | 85 +++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 src/main/java/com/sorts/CombSort.java create mode 100644 src/test/java/com/sorts/CombSortTest.java diff --git a/src/main/java/com/sorts/CombSort.java b/src/main/java/com/sorts/CombSort.java new file mode 100644 index 000000000000..1f28c0f6d9fd --- /dev/null +++ b/src/main/java/com/sorts/CombSort.java @@ -0,0 +1,61 @@ +package com.sorts; + +import com.types.Sort; + +/** + * Comb Sort algorithm implementation + *

+ * Best-case performance O(n * log(n)) + * Worst-case performance O(n ^ 2) + * Worst-case space complexity O(1) + *

+ * Comb sort improves on bubble sort. + * + * @author Sandeep Roy (https://github.com/sandeeproy99) + * @author Podshivalov Nikita (https://github.com/nikitap492) + * + */ +class CombSort implements Sort { + + // To find gap between elements + private int nextGap(int gap) { + // Shrink gap by Shrink factor + gap = (gap * 10) / 13; + return (gap < 1) ? 1 : gap; + } + + /** + * Function to sort arr[] using Comb + * + * @param arr - an array should be sorted + * @return sorted array + */ + @Override + public > T[] sort(T arr[]) { + int size = arr.length; + + // initialize gap + int gap = size; + + // Initialize swapped as true to make sure that loop runs + boolean swapped = true; + + // Keep running while gap is more than 1 and last iteration caused a swap + while (gap != 1 || swapped) { + // Find next gap + gap = nextGap(gap); + + // Initialize swapped as false so that we can check if swap happened or not + swapped = false; + + // Compare all elements with current gap + for (int i = 0; i < size - gap; i++) { + if (SortUtils.less(arr[i + gap], arr[i])) { + // Swap arr[i] and arr[i+gap] + swapped = SortUtils.swap(arr, i, i + gap); + } + } + } + return arr; + } +} \ No newline at end of file diff --git a/src/test/java/com/sorts/CombSortTest.java b/src/test/java/com/sorts/CombSortTest.java new file mode 100644 index 000000000000..ffd13f7ee911 --- /dev/null +++ b/src/test/java/com/sorts/CombSortTest.java @@ -0,0 +1,85 @@ +package com.sorts; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + +class CombSortTest { + + //One global combSort instance variable + CombSort combSort = new CombSort(); + + //Integer Sort Test + @Test + void CombSortIntegerTest(){ + + Integer array1[] = { 9, 5, 4, 6, 0, 100, 91, 40, 140, 500, 4, -1, -19}; + Integer array2[] = { 9, 5, 4, 6, 0, 100, 91, 40, 140, 500, 4, -1, -19}; + + //using Java's tested sort algorithm to sort our unsorted array + Arrays.sort(array1); + + //sort our unsorted array using our new CombSort algorithm + combSort.sort(array2); + + //compare the two results, our CombSort vs. Java's sort + Assertions.assertArrayEquals(array1,array2); + } + + //String Sort Test + @Test + void CombSortStringTest(){ + + String array1[] = { "Ten" , "Nine", "Eight", "Seven", "Six", "Five", "Four", "One", "Zero" }; + String array2[] = { "Ten" , "Nine", "Eight", "Seven", "Six", "Five", "Four", "One", "Zero" }; + + //using Java's tested sort algorithm to sort our unsorted array + Arrays.sort(array1); + + //sort our unsorted array using our new CombSort algorithm + combSort.sort(array2); + + //compare the two results, our CombSort vs. Java's sort + Assertions.assertArrayEquals(array1,array2); + + } + + //Double Sort Test + @Test + void CombSortDoubleTest(){ + + Double array1[] = { 90.0, -10.0, 0.0, -1.0, -23.98, 10.76, 20.92 }; + Double array2[] = { 90.0, -10.0, 0.0, -1.0, -23.98, 10.76, 20.92 }; + + //using Java's tested sort algorithm to sort our unsorted array + Arrays.sort(array1); + + //sort our unsorted array using our new CombSort algorithm + combSort.sort(array2); + + //compare the two results, our CombSort vs. Java's sort + Assertions.assertArrayEquals(array1,array2); + + } + + //Character Sort Test + @Test + void CombSortCharacterTest(){ + + Character array1[] = { 'Z', 'A', 'B', 'z', 'b', 'c' }; + Character array2[] = { 'Z', 'A', 'B', 'z', 'b', 'c' }; + + //using Java's tested sort algorithm to sort our unsorted array + Arrays.sort(array1); + + //sort our unsorted array using our new CombSort algorithm + combSort.sort(array2); + + //compare the two results, our CombSort vs. Java's sort + Assertions.assertArrayEquals(array1,array2); + + } +} \ No newline at end of file From ae92899099d6b704ed6730cc64793f833a228889 Mon Sep 17 00:00:00 2001 From: Mohamad Jayyusi Date: Sun, 15 Sep 2019 12:33:07 -0400 Subject: [PATCH 2/2] Update CombSortTest.java removed unnecessary comments removed blank lines at end of method modified method names --- src/test/java/com/sorts/CombSortTest.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/test/java/com/sorts/CombSortTest.java b/src/test/java/com/sorts/CombSortTest.java index ffd13f7ee911..686e6a499840 100644 --- a/src/test/java/com/sorts/CombSortTest.java +++ b/src/test/java/com/sorts/CombSortTest.java @@ -9,12 +9,10 @@ class CombSortTest { - //One global combSort instance variable CombSort combSort = new CombSort(); - //Integer Sort Test @Test - void CombSortIntegerTest(){ + void testIntegerSort(){ Integer array1[] = { 9, 5, 4, 6, 0, 100, 91, 40, 140, 500, 4, -1, -19}; Integer array2[] = { 9, 5, 4, 6, 0, 100, 91, 40, 140, 500, 4, -1, -19}; @@ -29,9 +27,8 @@ void CombSortIntegerTest(){ Assertions.assertArrayEquals(array1,array2); } - //String Sort Test @Test - void CombSortStringTest(){ + void testStringSort(){ String array1[] = { "Ten" , "Nine", "Eight", "Seven", "Six", "Five", "Four", "One", "Zero" }; String array2[] = { "Ten" , "Nine", "Eight", "Seven", "Six", "Five", "Four", "One", "Zero" }; @@ -44,12 +41,10 @@ void CombSortStringTest(){ //compare the two results, our CombSort vs. Java's sort Assertions.assertArrayEquals(array1,array2); - } - //Double Sort Test @Test - void CombSortDoubleTest(){ + void testDoubleSort(){ Double array1[] = { 90.0, -10.0, 0.0, -1.0, -23.98, 10.76, 20.92 }; Double array2[] = { 90.0, -10.0, 0.0, -1.0, -23.98, 10.76, 20.92 }; @@ -62,12 +57,10 @@ void CombSortDoubleTest(){ //compare the two results, our CombSort vs. Java's sort Assertions.assertArrayEquals(array1,array2); - } - //Character Sort Test @Test - void CombSortCharacterTest(){ + void testCharacterSort(){ Character array1[] = { 'Z', 'A', 'B', 'z', 'b', 'c' }; Character array2[] = { 'Z', 'A', 'B', 'z', 'b', 'c' }; @@ -80,6 +73,5 @@ void CombSortCharacterTest(){ //compare the two results, our CombSort vs. Java's sort Assertions.assertArrayEquals(array1,array2); - } } \ No newline at end of file