Zufallszahlen ohne Doppelwerte
-
Hallo.
Ich möchte in ein Feld von MAX_PIXELS Elementen die Elemente 1 bis MAX_PIXELS zufällig hineinschreiben, ohne dass ein Wert doppelt vorkommt.
Meine Lösung sieht so aus:
void sort::CreateRandomPixels() { int i, j; for(i=1;i<MAX_PIXELS;i++) pixels[i]=-1; for(i=1;i<MAX_PIXELS;i++) { j = rand()%MAX_PIXELS; while(pixels[j%MAX_PIXELS]>=0) { j++; } pixels[j%MAX_PIXELS]=i; }; };Das ganze funktioniert zwar und es kommt auch kein Wert doppelt vor, allerdings wenn ich das zeichnen lasse sieht das nicht wirklich so aus, als ob es gleichverteilt ist. Hat jemand eine andere Möglichkeit, wie man sowas machen kann? Diese while-Schleife ist meines Erachtens das Problem.
Grüße
Max
-
seh jetzt nich richtig durch bei deinem algorithmus. aber nimm doch std::random_shuffle:
#include <algorithm> int ar[num]; for(int i = 0; i < num; i++) ar[i] = i; std::random_shuffle(ar, ar+num);