есть исходный массив и соответствующий ему массив номеров эл-тов.
нужно перемешать эл-ты массива номеров и в соответствии с ним основной массив.
затем вернуть его изначальный порядок.
вот то,что у меня получилось...
но я явно как-то неправильно связываю сортировку массива номеров с перемещением эл-тов в основном массиве.только вот ничего другого никак придумать не могу...помогите,пожалуйста...
type
artype=array [1..20] of byte;
var
n,i,j,t,h:byte;
k,d,k1,d1:artype;
begin
write('Enter the number of elements ');readln(n);
randomize;
//create
writeln('Ishodniy massiv:');
for i:=1 to n do
begin
d[i]:=random(20);
write(d[i],' ' );
k[i]:=i;
end;
writeln;
//mix
writeln('Peremeshannie elementi massiva:');
i:=1;
while i<=n do
begin
t:=random(n)+1;
if i=1 then
begin
k1[i]:=t;
d1[i]:= d[t];
write(d1[i],' ');
inc(i);
end
else
begin
j:=1;
h:=0;
while j<i do
begin
if k1[j]=t then inc(h);
inc(j);
end;
if h=0 then
begin
k1[i]:=t;
d1[i]:= d[t];
write(d1[i],' ');
inc(i);
end;
end;
end;
writeln;
//sort {вот здесь идет возвращение былого порядка}
for i:=1 to n do
begin
t:=k1[i];
j:=i-1;
while (t<k1[j]) do
begin
k1[j+1]:=k1[j];
dec(j);
end;
k1[j+1]:=t;
t:=d1[j];
d1[j]:=d1[j+1];
d1[j+1]:=t;
end;
writeln('Elementi v vostanovlennom poryadke:');
for i:=1 to n do write(d1[i],' ');
readln;
end.
То есть, фактически, задача сводится к следующему:
type
artype=array [1..20] of byte;
var
n,i,t:byte;
k, d: artype;
indexes: set of byte;
begin
write('Enter the number of elements '); readln(n);
randomize;
// create
writeln('Ishodniy massiv:');
for i:=1 to n do begin
d[i]:=random(20);
write(d[i],' ' );
k[i]:=i;
end;
writeln;
// mix
writeln('Peremeshannie elementi massiva:');
indexes := [];
for i := 1 to n do begin
repeat
T := random(n) + 1;
until not (T in indexes);
indexes := indexes + [T];
k[i] := T;
end;
for i := 1 to n do
write(d[k[i]], ' ');
writeln;
writeln('Elementi v vostanovlennom poryadke:');
for i := 1 to n do
write(d[i],' ');
readln;
end.
for i:=1 to n do begin
j:=random(n)+1;
t:=d[i]; d[i]:=d[j]; d[j]:=t;
t:=k[i]; k[i]:=k[j]; k[j]:=t;
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if k[i]>k[j] then begin
t:=d[i]; d[i]:=d[j]; d[j]:=t;
t:=k[i]; k[i]:=k[j]; k[j]:=t;
end;
да,действительно...спасибо)