Złożoność obliczeniowa sortowania Shella - wątpliwości

0

Badam złożoność obliczeniową sortowania Shella dla ciągów dających rezultat o(n2), czyli pierwszy z tabelki: https://pl.wikipedia.org/wiki/Sortowanie_Shella

Mój algorytm wygląda tak (JAVA):

public static double[] shell(double[] a) {
        int increment = a.length / 2;
        while (increment > 0) {
            for (int i = increment; i < a.length; i++) {
                int j = i;
                double temp = a[i];
                while (j >= increment && a[j - increment] > temp) {
                    a[j] = a[j - increment];
                    j = j - increment;
                }
                a[j] = temp;
            }
            if (increment == 2) {
                increment = 1;
            } else {
                increment *= (5.0 / 11);
            }
        }
        return a;
    }
  1. Czy jest poprawny dla o(n^2) ?
  2. Wiem, że jakaś mała zmiana w kodzie (odstępy? gdzie?) powoduje, że złożoność się zmienia, tylko właśnie tego nie rozumiem, a będę jeszcze badał o(n3/2) i o(n4/3)
  3. Czy aby z tego kodu wyszła mi złożoność o(n2) to mogę jako argument funkcji dać tablicę o wielkości będącej potęgą 2 z dowolnymi wartościami? Badam taki przypadek i mam niepokojące czasy sortowania, wcale nie n2
0
  1. o to nie O, ani nie Theta. Zamiast oszczędzać uderzeń w Shifta to napisz precyzyjnie.
  2. Jeżeli ostatni odstęp będzie równy 1 to kod na pewno będzie sortował poprawnie, bo odstęp równy 1 oznacza klasyczne sortowanie przez wstawianie (które oczywiście działa).
  3. Co to znaczy "niepokojące czasy sortowania"? Porównywałeś z czasem zwykłego sortowania przez wstawianie?
  4. Odstępy mają wpływ na złożoność i jest to opisane w tabelce. Nie wiem co w tym jest niejasnego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1