Hallo!
In der Schule machen wir derzeit, wie wahrscheinlich jeder Informatikkurs, Sortieralgorithmen

. Aber nur solche, die arrays sortieren. Ich hab mich aber mal gefragt, wie man am besten auf einer Festplatte sortieren könnte. Und bei stark begrenzten Zahlenmengen, aber einer großen Anzahl, erschien es mir am sinvollsten einfach zu Zählen(deshalb Count Sort), wie oft welche Zahl vorkam. Das ist zwar, vor allem bei großen Zahlenmengen sehr Arbeitsspeicherlastig, da die Array, in der sich gemerkt wird wie oft was vorkam, proportional zur Zahlenmenge ist. Allerdins müsste man die Festplatte nur zwei mal, linear abgehen(1mal schreiben, 1mal lesen). Ich hab das ganze zur Verdeutlichung mal mit einer Byte array geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure CountSort(Var BytArray: array of Byte); Var IntArr: array[0..255] of Integer; I, J, P: Integer; begin p:= Low(BytArray)-1; for I := 0 to 255 do IntArr[i]:= 0; for I := Low(BytArray) to High(BytArray) do inc(IntArr[BytArray[i]]); for I := 0 to 255 do if IntArr[i]>0 then for J := 1 to IntArr[i] do begin inc(p); BytArray[p]:= I; end; end; |
PS: Falls es das ganze schon unter einem anderen Namen gibt sagt bitte bescheid.
Moderiert von
Kha: Code- durch Delphi-Tags ersetzt