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;
}
- Czy jest poprawny dla o(n^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)
- 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