Refactoring and code improving for OddEvenSort (#5242)
* Refactoring and code improving for OddEvenSort, changing it according to SortAlgorithm approach, also applying SortUtils * Fix checkstyle * Remove redundant main, remove redundant tests. --------- Co-authored-by: alx <alx@alx.com> Co-authored-by: Piotr Idzik <65706193+vil02@users.noreply.github.com>
This commit is contained in:
parent
a9db8428b2
commit
91101ec424
@ -1,69 +1,41 @@
|
||||
package com.thealgorithms.sorts;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
// https://en.wikipedia.org/wiki/Odd%E2%80%93even_sort
|
||||
public final class OddEvenSort {
|
||||
private OddEvenSort() {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
int[] arr = new int[100];
|
||||
|
||||
Random random = new Random();
|
||||
|
||||
// Print out unsorted elements
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
arr[i] = random.nextInt(100) - 50;
|
||||
System.out.println(arr[i]);
|
||||
}
|
||||
System.out.println("--------------");
|
||||
|
||||
oddEvenSort(arr);
|
||||
|
||||
// Print Sorted elements
|
||||
for (int i = 0; i < arr.length - 1; ++i) {
|
||||
System.out.println(arr[i]);
|
||||
assert arr[i] <= arr[i + 1];
|
||||
}
|
||||
}
|
||||
/**
|
||||
* OddEvenSort class implements the SortAlgorithm interface using the odd-even sort technique.
|
||||
* Odd-even sort is a comparison sort related to bubble sort.
|
||||
* It operates by comparing all (odd, even)-indexed pairs of adjacent elements in the list and, if a pair is in the wrong order, swapping them.
|
||||
* The next step repeats this process for (even, odd)-indexed pairs. This process continues until the list is sorted.
|
||||
*
|
||||
*/
|
||||
public final class OddEvenSort implements SortAlgorithm {
|
||||
|
||||
/**
|
||||
* Odd Even Sort algorithms implements
|
||||
* Sorts the given array using the Odd-Even Sort algorithm.
|
||||
*
|
||||
* @param arr the array contains elements
|
||||
* @param <T> the type of elements in the array, which must implement the Comparable interface
|
||||
* @param arr the array to be sorted
|
||||
* @return the sorted array
|
||||
*/
|
||||
public static void oddEvenSort(int[] arr) {
|
||||
@Override
|
||||
public <T extends Comparable<T>> T[] sort(T[] arr) {
|
||||
boolean sorted = false;
|
||||
while (!sorted) {
|
||||
sorted = true;
|
||||
|
||||
for (int i = 1; i < arr.length - 1; i += 2) {
|
||||
if (arr[i] > arr[i + 1]) {
|
||||
swap(arr, i, i + 1);
|
||||
if (arr[i].compareTo(arr[i + 1]) > 0) {
|
||||
SortUtils.swap(arr, i, i + 1);
|
||||
sorted = false;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < arr.length - 1; i += 2) {
|
||||
if (arr[i] > arr[i + 1]) {
|
||||
swap(arr, i, i + 1);
|
||||
if (arr[i].compareTo(arr[i + 1]) > 0) {
|
||||
SortUtils.swap(arr, i, i + 1);
|
||||
sorted = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to swap two array values.
|
||||
*
|
||||
* @param arr the array contains elements
|
||||
* @param i the first index to be swapped
|
||||
* @param j the second index to be swapped
|
||||
*/
|
||||
private static void swap(int[] arr, int i, int j) {
|
||||
int temp = arr[i];
|
||||
arr[i] = arr[j];
|
||||
arr[j] = temp;
|
||||
return arr;
|
||||
}
|
||||
}
|
||||
|
@ -1,36 +1,15 @@
|
||||
package com.thealgorithms.sorts;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author Tabbygray (https://github.com/Tabbygray)
|
||||
* @see OddEvenSort
|
||||
*/
|
||||
|
||||
public class OddEvenSortTest {
|
||||
@Test
|
||||
public void oddEvenSortEmptyArray() {
|
||||
int[] inputArray = {};
|
||||
OddEvenSort.oddEvenSort(inputArray);
|
||||
int[] expectedOutput = {};
|
||||
assertArrayEquals(inputArray, expectedOutput);
|
||||
}
|
||||
public class OddEvenSortTest extends SortingAlgorithmTest {
|
||||
private final OddEvenSort oddEvenSort = new OddEvenSort();
|
||||
|
||||
@Test
|
||||
public void oddEvenSortNaturalNumberArray() {
|
||||
int[] inputArray = {18, 91, 86, 60, 21, 44, 37, 78, 98, 67};
|
||||
OddEvenSort.oddEvenSort(inputArray);
|
||||
int[] expectedOutput = {18, 21, 37, 44, 60, 67, 78, 86, 91, 98};
|
||||
assertArrayEquals(inputArray, expectedOutput);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void oddEvenSortIntegerArray() {
|
||||
int[] inputArray = {57, 69, -45, 12, -85, 3, -76, 36, 67, -14};
|
||||
OddEvenSort.oddEvenSort(inputArray);
|
||||
int[] expectedOutput = {-85, -76, -45, -14, 3, 12, 36, 57, 67, 69};
|
||||
assertArrayEquals(inputArray, expectedOutput);
|
||||
@Override
|
||||
SortAlgorithm getSortAlgorithm() {
|
||||
return oddEvenSort;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user