Dieses Sortierverfahren gleicht dem menschlichen Kartensortieren beim Kartenspiel. Alle zu sortierenden Handkarten liegen verdeckt auf dem Tisch. Man nehme eine Karte auf die Hand. Dann die zweite. Man guckt jetzt von links nach rechts, wo sie hinpasst. Dazu vergleicht man sie mit der ersten Handkarte von links. Ist sie größer, wird sie eingefügt. (wir wollen ja zuerst die häufigsten items). Wenn nicht wird die zweite von links überprüft (das geht natürlich erst, wenn man schon zwei Karten auf der Hand hat), usw. Hat man zB. schon sechs Karten auf der Hand, nimmt man die siebte und vergleicht sie "...mit der ersten - zu klein. Mit der zweiten- zu klein. mit der dritten - ah, größer!" Jetzt werden alle hinteren Karten um eins nach rechts verschoben. Das heißt die vierte Stelle, fünfte Stelle, sechste... Man muss nur aufpassen, dass man eine Karte nur aufnimmt, wenn sie größer null ist (macht man normalerweise nie, deswegen fehlt es im Quelltext) und die Kartenhand nicht voll ist (Anzahl der ItemPosi-Variablen minus 1 auf der Hand vor der Aufnahme).
#Label1
*Komlette ItemPosi-Liste leeren mit Schleife oder einzeln*
Var1 := Variablen-Nummer von ItemPosi1
Var2 := ID des aufgenommenen Items
Var3 := Variablen-Nummer der letzten ItemPosi
Var4 := Variablen-Nummer der letzten ItemPosi -1
..loop
....wenn (Var2 = Pointer[Var1]) dann
......Pointer[Var2] +1
......goto #Label1
....end
....wenn ("letzte ItemPosi" = 0)
......wenn (Pointer [Var2] > Pointer[Pointer[Var1]]) dann
........loop
..........pointer[Var3] := pointer [Var4]
..........wenn (Var4 = Var1) dann
............pointer[Var1] := Var2
............goto #Label2
..........end
..........Var3 -1
..........Var4 -1
........end loop
........goto #Label2
......end
....end
....wenn Var1 = Var3 --> goto #Label2
....Var1 +1
..end loop
#Label2
...Wer Fehler findet, bitte melden.
...Wer Verständnis-Fragen hat, genau nachhaken.
..und, ach ja: Der Doppel-Pointer ist schon richtig so (ItemPosi-->ItemID-->Anzahl)
...