Немного "зацепила" эта задачка, потому продолжу. Не столько для ТС, сколько в порядке междусобойчика.
Начать с того, что ТС абсолютно невразумительно сформулировал задание.
Цитата:
Сообщение от Alexey123
Дан массив N из набора случайных чисел. Отсортировать массив в таком порядке -
Пример: 0 1 2 3 4 5 6 7 8 9 10 - 10 8 6 4 2 0 1 3 5 7 9 //массив после сортировки//
Ну, то есть большое влево - маленькое вправо и т.д.
|
Тут возможны две интерпретации.
1. Как поняли
Viewer (жаль, не знаю имени) и
Евгений:
В левой части нового массива должны расположиться все нечетные (по значению) элементы в порядке убывания. В правой - все четные в порядке возрастания.
2. Как понял
Vladimir_S (то бишь я):
Максимальный элемент ставится в крайнюю левую позицию, следующий по значению - в крайнюю правую, следующий - во вторую слева, следующий - во вторую справа и т.д. Решение именно этой задачи я и предложил.
(Хотел бы я знать, что нашему ТС "понятно", если решались разные задачи, и кто прав - мне лично совсем непонятно).
Так вот, решение, предложенное мною (в моей интерпретации задания), далеко от оптимального (множества, лишний массив и т.п.), а потому пришло мне в голову другое - простое и изящное, вообще не требующее ни вспомогательных массивов, ни множеств. Да и четность длины массива отрабатывается автоматически. Вот так:
Код:
Type
Ar=Array[1..255] of Byte;
Var
A:Ar;
k,N,i:Byte;
Procedure Exch(q:byte; var C:Ar);
Var
Mx1,Mx2,D,m,p:byte;
begin
p:=1+q;
Mx1:=C[p];
for m:=2+q to N-q do
if C[m]>Mx1 then
begin
p:=m;
Mx1:=C[p];
end;
D:=C[1+q];
C[1+q]:=C[p];
C[p]:=D;
p:=2+q;
Mx2:=C[p];
for m:=3+q to N-q do
if C[m]>Mx2 then
begin
p:=m;
Mx2:=C[p];
end;
D:=C[N-q];
C[N-q]:=C[p];
C[p]:=D;
end;
Begin
Randomize;
Write(' N = ');
Readln(N);
Writeln('Initial array:');
for i:=1 to N do
begin
A[i]:=Random(100);
write(A[i]:4);
end;
writeln;
writeln;
for k:=0 to (N div 2)-1 do Exch(k,A);
Writeln('Ordered array:');
for i:=1 to N do write(A[i]:4);
Readln
End.
Подумаю, может быть и вашей интерпретации задания что-нибудь в этом роде придумаю. Хотя тут чуть сложнее.