Zuerst, hier ist mein Shell Bankleitzahl (mit Java):Zeitaufwand für Shell-Sortierung?
public char[] shellSort(char[] chars) {
int n = chars.length;
int increment = n/2;
while(increment > 0) {
int last = increment;
while(last < n) {
int current = last - increment;
while(current >= 0) {
if(chars[current] > chars[current + increment]) {
//swap
char tmp = chars[current];
chars[current] = chars[current + increment];
chars[current + increment] = tmp;
current -= increment;
}
else { break; }
}
last++;
}
increment /= 2;
}
return chars;
}
Ist dies eine korrekte Umsetzung der Shell Art (zu vergessen, jetzt über die effizienteste Lücke Sequenz - zB 1,3,7,21. ..)? Ich frage, weil ich gehört habe, dass die für Shell Sort am besten geeignete Zeitkomplexität O (n) ist. (Siehe http://en.wikipedia.org/wiki/Sorting_algorithm). Ich kann nicht sehen, dass diese Effizienz durch meinen Code realisiert wird. Wenn ich ihm Heuristiken hinzugefügt habe, dann ja, aber so wie es steht, nein.
Das heißt, meine Hauptfrage jetzt - ich habe Schwierigkeiten bei der Berechnung der Big O Zeit Komplexität für meine Shell-Sortimplementierung. Ich habe festgestellt, dass die äußerste Schleife als O (log n), die mittlere Schleife als O (n) und die innerste Schleife auch als O (n) ist, aber ich erkenne, dass die inneren zwei Schleifen nicht wirklich O sind (n) - sie wären viel weniger als das - was sollten sie sein? Denn offensichtlich läuft dieser Algorithmus viel effizienter als O ((log n) n^2).
Jede Anleitung wird sehr geschätzt, da ich sehr verloren bin! : P
Siehe [shell-sort-java-example] (http://stackoverflow.com/questions/4833423/shell-sort-java-example) – nawfal