From d82a2006bae2bf5402a9aafbb67c9d1504406ac1 Mon Sep 17 00:00:00 2001 From: tackhwa <55059307+tackhwa@users.noreply.github.com> Date: Sun, 7 Aug 2022 16:19:25 +0800 Subject: [PATCH] Add Binary Insertion Sort (#3206) --- .../sorts/BinaryInsertionSort.java | 32 +++++++++++++++++++ .../sorts/BinaryInsertionSortTest.java | 26 +++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/main/java/com/thealgorithms/sorts/BinaryInsertionSort.java create mode 100644 src/test/java/com/thealgorithms/sorts/BinaryInsertionSortTest.java diff --git a/src/main/java/com/thealgorithms/sorts/BinaryInsertionSort.java b/src/main/java/com/thealgorithms/sorts/BinaryInsertionSort.java new file mode 100644 index 000000000..1a2b1159c --- /dev/null +++ b/src/main/java/com/thealgorithms/sorts/BinaryInsertionSort.java @@ -0,0 +1,32 @@ +package com.thealgorithms.sorts; +public class BinaryInsertionSort{ + + + + // Binary Insertion Sort method + public int[] binaryInsertSort(int[] array){ + + for(int i = 1; i < array.length; i++){ + + int temp=array[i]; + int low = 0; + int high = i - 1; + + while(low <= high){ + int mid = (low + high) / 2; + if(temp < array[mid]){ + high = mid - 1; + }else{ + low = mid + 1; + } + } + + for(int j = i; j >= low + 1; j--){ + array[j] = array[j - 1]; + } + + array[low] = temp; + } + return array; + } +} diff --git a/src/test/java/com/thealgorithms/sorts/BinaryInsertionSortTest.java b/src/test/java/com/thealgorithms/sorts/BinaryInsertionSortTest.java new file mode 100644 index 000000000..70d0abade --- /dev/null +++ b/src/test/java/com/thealgorithms/sorts/BinaryInsertionSortTest.java @@ -0,0 +1,26 @@ +package com.thealgorithms.sorts; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + + + +class BinaryInsertionSortTest { + 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); + } +}