From 90269673edd491f2c622b58fb0038a92bed1f24e Mon Sep 17 00:00:00 2001 From: vedant kasar Date: Wed, 24 Jan 2024 22:31:09 +0530 Subject: [PATCH 1/5] added ExchangeSort and its testcases --- src/main/java/com/thealgorithms/sorts/ExchangeSort.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/java/com/thealgorithms/sorts/ExchangeSort.java diff --git a/src/main/java/com/thealgorithms/sorts/ExchangeSort.java b/src/main/java/com/thealgorithms/sorts/ExchangeSort.java new file mode 100644 index 000000000000..e69de29bb2d1 From ff3ebe6417d7daea9aab0d9afd440776c641c2f3 Mon Sep 17 00:00:00 2001 From: vedant kasar Date: Wed, 24 Jan 2024 22:38:29 +0530 Subject: [PATCH 2/5] added test --- src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java diff --git a/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java b/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java new file mode 100644 index 000000000000..e69de29bb2d1 From e853320716e22ff4611ae87f7df5037ba292a4d9 Mon Sep 17 00:00:00 2001 From: vedant kasar Date: Thu, 25 Jan 2024 01:13:54 +0530 Subject: [PATCH 3/5] test --- .../thealgorithms/sorts/ExchangeSortTest.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java b/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java index e69de29bb2d1..8938be98e147 100644 --- a/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java @@ -0,0 +1,41 @@ +package com.thealgorithms.sorts; +// added by @555vedant// + + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +import org.junit.jupiter.api.Test; + +public class ExchangeSortTest { + @Test + public void testEmptyArray() { + int[] arr = {}; + int[] expected = {}; + ExchangeSort.exchangeSort(arr); + assertArrayEquals(expected, arr); + } + + @Test + public void testAlreadySortedArray() { + int[] arr = {1, 2, 3, 4, 5}; + int[] expected = {1, 2, 3, 4, 5}; + ExchangeSort.exchangeSort(arr); + assertArrayEquals(expected, arr); + } + + @Test + public void testReverseSortedArray() { + int[] arr = {5, 4, 3, 2, 1}; + int[] expected = {1, 2, 3, 4, 5}; + ExchangeSort.exchangeSort(arr); + assertArrayEquals(expected, arr); + } + + @Test + public void testRandomOrderArray() { + int[] arr = {3, 1, 4, 2, 5}; + int[] expected = {1, 2, 3, 4, 5}; + ExchangeSort.exchangeSort(arr); + assertArrayEquals(expected, arr); + } +} From f6bf822a8f618c75b6d6c4044ac61e82b222b360 Mon Sep 17 00:00:00 2001 From: vedant kasar Date: Thu, 25 Jan 2024 01:31:18 +0530 Subject: [PATCH 4/5] fixed empty file --- .../com/thealgorithms/sorts/ExchangeSort.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main/java/com/thealgorithms/sorts/ExchangeSort.java b/src/main/java/com/thealgorithms/sorts/ExchangeSort.java index e69de29bb2d1..e2e7572402e9 100644 --- a/src/main/java/com/thealgorithms/sorts/ExchangeSort.java +++ b/src/main/java/com/thealgorithms/sorts/ExchangeSort.java @@ -0,0 +1,34 @@ +package com.thealgorithms.sorts; + +import java.util.Arrays; + +public class ExchangeSort { + + public static void exchangeSort(int[] arr) { + int n = arr.length; + + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + // Swap arr[j] and arr[j + 1] + int temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } + } + + public static void main(String[] args) { + int[] arr = {12, 45, 23, 67, 10}; + + System.out.println("Original Array: " + Arrays.toString(arr)); + + // Sorting using ExchangeSort + exchangeSort(arr); + + System.out.println("Sorted Array: " + Arrays.toString(arr)); + } +} + + From 478b19bb5b21e29b3539e002bf8f343833443562 Mon Sep 17 00:00:00 2001 From: vedant kasar Date: Sat, 27 Jan 2024 22:57:33 +0530 Subject: [PATCH 5/5] modification in logic --- .../com/thealgorithms/sorts/ExchangeSort.java | 69 ++++++++++++++----- .../thealgorithms/sorts/ExchangeSortTest.java | 41 ++--------- 2 files changed, 54 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/thealgorithms/sorts/ExchangeSort.java b/src/main/java/com/thealgorithms/sorts/ExchangeSort.java index e2e7572402e9..3048e26cfadd 100644 --- a/src/main/java/com/thealgorithms/sorts/ExchangeSort.java +++ b/src/main/java/com/thealgorithms/sorts/ExchangeSort.java @@ -1,33 +1,64 @@ package com.thealgorithms.sorts; -import java.util.Arrays; +import static com.thealgorithms.sorts.SortUtils.*; -public class ExchangeSort { +/** + * Exchange Sort (Cocktail Shaker Sort) implementation. + * + * @author 555vedant(Vedant Kasar) + * @see SortAlgorithm + */ +class ExchangeSort implements SortAlgorithm { - public static void exchangeSort(int[] arr) { - int n = arr.length; + /** + * Implements generic exchange sort (Cocktail Shaker Sort) algorithm. + * + * @param array the array to be sorted. + * @param the type of elements in the array. + * @return the sorted array. + */ + @Override + public > T[] sort(T[] array) { + int left = 0; + int right = array.length - 1; - for (int i = 0; i < n - 1; i++) { - for (int j = 0; j < n - i - 1; j++) { - if (arr[j] > arr[j + 1]) { - // Swap arr[j] and arr[j + 1] - int temp = arr[j]; - arr[j] = arr[j + 1]; - arr[j + 1] = temp; + while (left <= right) { + boolean swapped = false; + + // Traverse from left to right + for (int i = left; i < right; ++i) { + if (greater(array[i], array[i + 1])) { + swap(array, i, i + 1); + swapped = true; } } - } - } - public static void main(String[] args) { - int[] arr = {12, 45, 23, 67, 10}; + // If no swap occurred, the array is already sorted + if (!swapped) { + break; + } + + // Move the right boundary one position to the left + --right; - System.out.println("Original Array: " + Arrays.toString(arr)); + // Traverse from right to left + for (int i = right; i > left; --i) { + if (greater(array[i - 1], array[i])) { + swap(array, i - 1, i); + swapped = true; + } + } - // Sorting using ExchangeSort - exchangeSort(arr); + // If no swap occurred, the array is already sorted + if (!swapped) { + break; + } + + // Move the left boundary one position to the right + ++left; + } - System.out.println("Sorted Array: " + Arrays.toString(arr)); + return array; } } diff --git a/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java b/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java index 8938be98e147..6c4271fa9e19 100644 --- a/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java +++ b/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java @@ -1,41 +1,8 @@ package com.thealgorithms.sorts; -// added by @555vedant// - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -import org.junit.jupiter.api.Test; - -public class ExchangeSortTest { - @Test - public void testEmptyArray() { - int[] arr = {}; - int[] expected = {}; - ExchangeSort.exchangeSort(arr); - assertArrayEquals(expected, arr); - } - - @Test - public void testAlreadySortedArray() { - int[] arr = {1, 2, 3, 4, 5}; - int[] expected = {1, 2, 3, 4, 5}; - ExchangeSort.exchangeSort(arr); - assertArrayEquals(expected, arr); - } - - @Test - public void testReverseSortedArray() { - int[] arr = {5, 4, 3, 2, 1}; - int[] expected = {1, 2, 3, 4, 5}; - ExchangeSort.exchangeSort(arr); - assertArrayEquals(expected, arr); - } - - @Test - public void testRandomOrderArray() { - int[] arr = {3, 1, 4, 2, 5}; - int[] expected = {1, 2, 3, 4, 5}; - ExchangeSort.exchangeSort(arr); - assertArrayEquals(expected, arr); +public class ExchangeSortTest extends SortingAlgorithmTest { + @Override + SortAlgorithm getSortAlgorithm() { + return new ExchangeSort(); } }