diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index 3a777c2c..31c2c607 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -1,68 +1,50 @@ package Sorts; +import static Sorts.SortUtils.*; + + /** * @author dpunosevac + * @author Podshivalov Nikita (https://github.com/nikitap492) + * + * @see SortAlgorithm + * */ -public class ShellSort { +public class ShellSort implements SortAlgorithm { /** * This method implements Generic Shell Sort. * @param array The array to be sorted */ - public static void shellSort(Comparable[] array) { + @Override + public > T[] sort(T[] array) { int N = array.length; int h = 1; while (h < N/3) { - h = 3 * h + 1; + 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); + for (int i = h; i < N; i++) { + for (int j = i; j >= h && less(array[j], array[j-h]); j -= h) { + swap(array, j, j - h); + } } - } - h /= 3; + 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; + return array; } 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]; + Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - for (int i=0;i> T[] sort(T[] unsorted); + +} diff --git a/Sorts/SortUtils.java b/Sorts/SortUtils.java new file mode 100644 index 00000000..73daf6a1 --- /dev/null +++ b/Sorts/SortUtils.java @@ -0,0 +1,60 @@ +package Sorts; + +import java.util.Arrays; +import java.util.List; + +/** + * The class contains util methods + * + * @author Podshivalov Nikita (https://github.com/nikitap492) + * + **/ +final class SortUtils { + + + /** + * Helper method for swapping places in array + * @param array The array which elements we want to swap + * @param idx index of the first element + * @param idy index of the second element + */ + static void swap(T[] array, int idx, int idy){ + T swap = array[idx]; + array[idx] = array[idy]; + array[idy] = 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 + */ + static > boolean less(T v, T w) { + return v.compareTo(w) < 0; + } + + + /** + * Just print list + * @param toPrint - a list which should be printed + */ + static void print(List toPrint){ + toPrint.stream() + .map(Object::toString) + .map(str -> str + " ") + .forEach(System.out::print); + + System.out.println(); + } + + + /** + * Prints an array + * @param toPrint - the array which should be printed + */ + static void print(Object[] toPrint){ + print(Arrays.asList(toPrint)); + } +}