005
19.08.2004, 14:24 Uhr
virtual
Sexiest Bit alive (Operator)
|
Hm.
Also erstmal was effizient angeht, so ist da ja noch Verbesserungspotential: 1. malloc anstelle von calloc 2. min aus der Schleife rausnehmen 3. Ein Schleifendurchgang unten kann jedenfalls gespart werden...
Wo ich mir aber komplett unsicher bin, ist der Algorithmus: Nehmen wir mal
C++: |
void swap(int*a, int*b) { int t = *a; *a = *b; *b=t; }
|
als gegeben an.
Dann wäre Beefies Lösung ja:
C++: |
... for(int i = 0; i < dim; ++i) { int r = rand() % (i + 1); swap(p+i, p+r); } ...
|
Aber wie sieht es mit Alternativen aus, zB:
C++: |
// A ... for(int i = 0; i < dim; ++i) { int r = rand() % dim; swap(p+i, p+r); } ...
|
Oder
C++: |
// B ... for(int i = 0; i < (dim+1)/2; ++i) { int r = rand() % dim; swap(p+i, p+r); } ...
|
-- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |