Merge pull request #5398 from moisko/master
BAEL-2212: Insertion Sort in Java
This commit is contained in:
		
						commit
						d385e7bbf5
					
				| @ -0,0 +1,41 @@ | |||||||
|  | package com.baeldung.algorithms.insertionsort; | ||||||
|  | 
 | ||||||
|  | public class InsertionSort { | ||||||
|  | 
 | ||||||
|  |     public static void insertionSortImperative(int[] input) { | ||||||
|  |         for (int i = 1; i < input.length; i++) { | ||||||
|  |             int key = input[i]; | ||||||
|  |             int j = i - 1; | ||||||
|  |             while (j >= 0 && input[j] > key) { | ||||||
|  |                 input[j + 1] = input[j]; | ||||||
|  |                 j = j - 1; | ||||||
|  |             } | ||||||
|  |             input[j + 1] = key; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static void insertionSortRecursive(int[] input) { | ||||||
|  |         insertionSortRecursive(input, input.length); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private static void insertionSortRecursive(int[] input, int i) { | ||||||
|  |         // base case | ||||||
|  |         if (i <= 1) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // sort the first i - 1 elements of the array | ||||||
|  |         insertionSortRecursive(input, i - 1); | ||||||
|  | 
 | ||||||
|  |         // then find the correct position of the element at position i | ||||||
|  |         int key = input[i - 1]; | ||||||
|  |         int j = i - 2; | ||||||
|  |         // shifting the elements from their position by 1 | ||||||
|  |         while (j >= 0 && input[j] > key) { | ||||||
|  |             input[j + 1] = input[j]; | ||||||
|  |             j = j - 1; | ||||||
|  |         } | ||||||
|  |         // inserting the key at the appropriate position | ||||||
|  |         input[j + 1] = key; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,26 @@ | |||||||
|  | package algorithms.insertionsort; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.algorithms.insertionsort.InsertionSort; | ||||||
|  | import org.junit.Test; | ||||||
|  | 
 | ||||||
|  | import static org.junit.Assert.assertArrayEquals; | ||||||
|  | 
 | ||||||
|  | public class InsertionSortUnitTest { | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenUnsortedArray_whenInsertionSortImperatively_thenItIsSortedInAscendingOrder() { | ||||||
|  |         int[] input = {6, 2, 3, 4, 5, 1}; | ||||||
|  |         InsertionSort.insertionSortImperative(input); | ||||||
|  |         int[] expected = {1, 2, 3, 4, 5, 6}; | ||||||
|  |         assertArrayEquals("the two arrays are not equal", expected, input); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenUnsortedArray_whenInsertionSortRecursively_thenItIsSortedInAscendingOrder() { | ||||||
|  |         // int[] input = {6, 4, 5, 2, 3, 1}; | ||||||
|  |         int[] input = {6, 4}; | ||||||
|  |         InsertionSort.insertionSortRecursive(input); | ||||||
|  |         int[] expected = {1, 2, 3, 4, 5, 6}; | ||||||
|  |         assertArrayEquals("the two arrays are not equal", expected, input); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user