From f7f70b575bee5d01ecc5ca1b1541b31146776053 Mon Sep 17 00:00:00 2001 From: Dusan Punosevac Date: Thu, 28 Sep 2017 18:33:36 +0200 Subject: [PATCH] Added Shell Sort --- Sorts/ShellSort.java | 68 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Sorts/ShellSort.java diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java new file mode 100644 index 000000000000..3a777c2cd797 --- /dev/null +++ b/Sorts/ShellSort.java @@ -0,0 +1,68 @@ +package Sorts; + +/** + * @author dpunosevac + */ +public class ShellSort { + + /** + * This method implements Generic Shell Sort. + * @param array The array to be sorted + */ + public static void shellSort(Comparable[] array) { + int N = array.length; + int h = 1; + + while (h < N/3) { + h = 3 * h + 1; + } + + while (h >= 1) { + for (int i = h; i < N; i++) { + for (int j = i; j >= h && less(array[j], array[j-h]); j -= h) { + exch(array, j, j - h); + } + } + + h /= 3; + } + } + + /** + * Helper method for exchanging places in array + * @param array The array which elements we want to swap + * @param i index of the first element + * @param j index of the second element + */ + private static void exch(Comparable[] array, int i, int j) { + Comparable swap = array[i]; + array[i] = array[j]; + array[j] = swap; + } + + /** + * This method checks if first element is less then the other element + * @param v first element + * @param w second element + * @return true if the first element is less then the second element + */ + private static boolean less(Comparable v, Comparable w) { + return v.compareTo(w) < 0; + } + + public static void main(String[] args) { + // Integer Input + int[] arr1 = {4,23,6,78,1,54,231,9,12}; + Integer[] array = new Integer[arr1.length]; + + for (int i=0;i