Hi phanty,
vorneweg, ich schliesse mich Hopsels Vorschlag an. Besser wirst Du es auf deterministische Weise nicht hinbekommen.
Ich schlage als Alternative aber einen probabilistischen Ansatz vor, der u.U. sehr effizient ist (das haengt allerdings von der Verteilung der Gewichte ab).
Idee:
Du generierst zwei Zufallszahlen:
Z ganzzahlig zwischen 1 und der Laenge des Arrays
und P zwischen 0 und 1 (mit hinreichender Genauigkeit).
Ist nun P kleiner als das Gewicht von array[Z], dann nimmste array[Z]. Anderenfalls machste das ganze nochmal.
Und dann geht man noch her und produziert P nicht zwischen 0 und 1, sondern zwischen 0 und dem Maximum aller Gewichte. Das aendert nichts an der Verteilung des Ergebnisses und macht den Algorithmus sehr effizient, sofern die Gewichte nicht zu verschieden sind.
viele Gruesse,
der Bademeister