yetanotheruser: Array Numerisch Sortieren (Größte Zahl zuerst ...)

Beitrag lesen

Hoi

Dazu muss ich aber auch sagen, dass die Elemente im Array via Funktion hinzugefügt/geändert werden. Die Werte sollen nicht "manuell" sortiert werden sondern unmittelbar nach einem neu eingefügten oder veränderten Eintrag.

Warum nimmst du dann nicht nen ganz anderen Ansatz ? Sortiere die Liste nicht NACH jedem Einfügen, sondern bohr deine Einfügen-Funktion auf, sodass die Sortierung gar nie erst durcheinander kommt.

Dazu sollte die Einfügen-Funktion die richtige Position im Array suchen ( sehr schnell zu finden, da schon sortierte Liste - Stichwort Binary Search) und an dieser Stelle dann das Element einfügen. Ist meiner Meinung nach definitiv schneller, als nach jedem Einfügen die Liste neu zu sortieren.

Also Funktion in etwa so:
function insertRank(rank, ranking) {
   einfuegeindex = binarysearch(rank, ranking);
   newarray = ranking.lenght + 1;
   for(var i = 0; i<einfuegeindex; i++)
       newarray[i] = ranking[i];
   for( i = einfuegeindex+1; i<newarray.lenght; i++)
       newarray[i] = ranking[i];
   newarray[einfuegeindex] = rank;
   ranking = newarray;
}

Und wenn du einen Rank updaten willst, dann lösche denjenigen Eintrag aus der liste und füge ihn neu über obige Funktion wieder ein.

Ist natürlich keine funktionsfähige Routine.

Gruß Ben