Цитата:
Сообщение от Viewer
И все же непонятно - почему в массиве после сортировки ( в Вашем примере ) идет дублирование чисел?
|
Не идёт. Это у него показаны старый - новый массивы.
А вообще - забавная такая задачка. По-всякому решать можно. Ну вот, например, с использованием множеств (
Alexey123, Вы уж простите великодушно, что программа написана на ЯП Free Pascal, т.е. на языке времён, как выяснилось, нашествия Батыя):
Код:
Type
Ar=Array[0..255] of Byte;
Var
A,B:Ar;
S:Set of Byte;
i,j,Jmax,N:Byte;
Function Num_max(C:Ar):Byte;
var
Mx,k,k1,Nm:Byte;
begin
k1:=0;
Repeat
if k1 in S then Inc(k1);
Until Not(k1 in S);
Mx:=C[k1];
Nm:=k1;
for k:=k1+1 to N do
if (C[k]>Mx) and Not(k in S) then
begin
Mx:=C[k];
Nm:=k;
end;
Num_max:=Nm;
end;
Begin
Randomize;
Write(' N = ');
Readln(N);
Writeln('Initial array:');
for i:=0 to N do
begin
A[i]:=Random(100);
write(A[i]:4);
end;
writeln;
writeln;
if (N mod 2)=0 then Jmax:=(N div 2)-1 else Jmax:=(N div 2);
S:=[];
j:=0;
Repeat
i:=Num_Max(A);
B[j]:=A[i];
S:=S+[i];
i:=Num_Max(A);
B[N-j]:=A[i];
S:=S+[i];
Inc(j);
Until j=Jmax+1;
if (N mod 2)=0 then
for i:=0 to N do
if Not(i in S) then B[(N div 2)]:=A[i];
Writeln('Ordered array:');
for i:=0 to N do write(B[i]:4);
Readln
End.