Auf den code gebe ich keine Garantie, ich hab ich nicht mal getestet.
Was dich sicher gewundert hat, war die Sache mit dem int* (^integer), der plötzlich ein array bekommt. In C/++ gibt es etwas, was man Pointer-Array-Dualität nennt. Dem Compiler ist es egal, ob es ein pointer oder ein array ist. Das
glaube ich umgangen zu haben. Ne Garantie kann ich dir nicht geben. Probier einfach mal aus, ob das Richtige rauskommt.
Delphi-Quellcode:
var
choose_idx:integer;
permute:array[0..SEGSIZE-1];
{ Generate a random permutation of the segments 1..n }
function generate_random_ordering(n:integer):integer;
var
tval:TTimeval;// struct timeval tval;
tzone:TTimezone; // struct timezone tzone;
i:integer; // register int i;
m:integer; // int m, st[SEGSIZE], *p;
st:array [0..SEGSIZE-1] of integer;
p:^integer;
begin
choose_idx := 1;
gettimeofday(@tval, @tzone);
srand48(tval.tv_sec);
for i := 0 to n do
st[i] := i;
for i:=1 to n do begin
m:=lrand48() mod (n + 1 - i) + 1;
permute[i] := st[i-1+m];
if m <> 1 then st[i-1+m] := st[i];
end;
result:=0;
end;
gruß, Christoph