Refactoring BinaryInsertionSort according to common SortAlgorithm approach (#5239)

* Refactoring BinaryInsertionSort according to common SortAlgorithm approach

* Formatting has been fixed

* Refactoring tests for BinaryInsertionSort according to SortingAlgorithmTest

* Removing redundant tests and improving variable readability

---------

Co-authored-by: alx <alx@alx.com>
Co-authored-by: Piotr Idzik <65706193+vil02@users.noreply.github.com>
This commit is contained in:
Alex K 2024-06-19 19:57:54 +03:00 committed by GitHub
parent bf4fc3f9c2
commit a9db8428b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 27 deletions

View File

@ -1,17 +1,28 @@
package com.thealgorithms.sorts; package com.thealgorithms.sorts;
public class BinaryInsertionSort { /**
* BinaryInsertionSort class implements the SortAlgorithm interface using the binary insertion sort technique.
* Binary Insertion Sort improves upon the simple insertion sort by using binary search to find the appropriate
* location to insert the new element, reducing the number of comparisons in the insertion step.
*/
public class BinaryInsertionSort implements SortAlgorithm {
// Binary Insertion Sort method /**
public int[] binaryInsertSort(int[] array) { * Sorts the given array using the Binary Insertion Sort algorithm.
*
* @param <T> the type of elements in the array, which must implement the Comparable interface
* @param array the array to be sorted
* @return the sorted array
*/
public <T extends Comparable<T>> T[] sort(T[] array) {
for (int i = 1; i < array.length; i++) { for (int i = 1; i < array.length; i++) {
int temp = array[i]; final T temp = array[i];
int low = 0; int low = 0;
int high = i - 1; int high = i - 1;
while (low <= high) { while (low <= high) {
final int mid = (low + high) >>> 1; final int mid = (low + high) >>> 1;
if (temp < array[mid]) { if (temp.compareTo(array[mid]) < 0) {
high = mid - 1; high = mid - 1;
} else { } else {
low = mid + 1; low = mid + 1;

View File

@ -1,27 +1,10 @@
package com.thealgorithms.sorts; package com.thealgorithms.sorts;
import static org.junit.jupiter.api.Assertions.assertArrayEquals; class BinaryInsertionSortTest extends SortingAlgorithmTest {
private final BinaryInsertionSort binaryInsertionSort = new BinaryInsertionSort();
import org.junit.jupiter.api.Test; @Override
SortAlgorithm getSortAlgorithm() {
class BinaryInsertionSortTest { return binaryInsertionSort;
BinaryInsertionSort bis = new BinaryInsertionSort();
@Test
// valid test case
public void binaryInsertionSortTestNonDuplicate() {
int[] array = {1, 0, 2, 5, 3, 4, 9, 8, 10, 6, 7};
int[] expResult = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] actResult = bis.binaryInsertSort(array);
assertArrayEquals(expResult, actResult);
}
@Test
public void binaryInsertionSortTestDuplicate() {
int[] array = {1, 1, 1, 5, 9, 8, 7, 2, 6};
int[] expResult = {1, 1, 1, 2, 5, 6, 7, 8, 9};
int[] actResult = bis.binaryInsertSort(array);
assertArrayEquals(expResult, actResult);
} }
} }