From 0ff74ca9f89da7f5c097bf0d52123faa7bb95b1d Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 11 Jan 2020 14:19:49 +0800 Subject: [PATCH] optimization --- Sorts/ShellSort.java | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index 49be29b9..199f31a8 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -2,48 +2,40 @@ package Sorts; import static Sorts.SortUtils.*; - -/** - * @author dpunosevac - * @author Podshivalov Nikita (https://github.com/nikitap492) - * @see SortAlgorithm - */ public class ShellSort implements SortAlgorithm { /** * This method implements Generic Shell Sort. * - * @param array The array to be sorted + * @param array the array to be sorted */ @Override public > T[] sort(T[] array) { - int N = array.length; - int h = 1; + int length = array.length; + int gap = 1; - while (h < N / 3) { - h = 3 * h + 1; + /* Calculate gap for optimization purpose */ + while (gap < length / 3) { + gap = 3 * gap + 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) { - swap(array, j, j - h); + for (; gap > 0; gap /= 3) { + for (int i = gap; i < length; i++) { + int j; + for (j = i; j >= gap && less(array[j], array[j - gap]); j -= gap) { + array[j] = array[j - gap]; } + array[j] = array[i]; } - - h /= 3; } - return array; } + /* Driver Code */ public static void main(String[] args) { Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; ShellSort sort = new ShellSort(); - Integer[] sorted = sort.sort(toSort); - - print(sorted); - + print(sort.sort(toSort)); } }