Программа должна сортировать массив(его длинна это степень двойки, т.е. 2,4,8,...). Берутся числа стоящие на нечетных местах и ставятся по порядку вначале массива, а затем берутся числа стоящие на четных местах и ставятся по порядку за ними и этот процесс повторяется для образовавшихся частей до тех пор пока не дойдет до частей из двух чисел.
Например, есть массив 0 1 2 3 4 5 6 7, тогда после выполнения программы массив будет иметь вид
0 2 4 6 1 3 5 7.
Далее эта процедура повторяется уже для половинок исходного массива(0 2 4 6 и 1 3 5 7) и массив тогда принимает вид 0 4 2 6 1 5 3 7. Так как в оставшихся половинках(0 4 и 2 6 и 1 5 и 3 7) все на четных и нечетных местаъ то их сортировать не надо и это окончательный ответ.
uses crt;
var position,k,n,m,bufer,point,q,part,d:integer; a: array [0 .. 4096] of integer;
begin
point:=16;
for position:=0 to (point-1) do a[position]:=position;
part:=2;
while round(point/part)>2 do
begin
for q:=0 to round(part/2-1) do
begin
position:=2+q*part;k:=1;
for n:=1 to round(point/part-1) do
begin
bufer:=a[position];
for m:= position downto position+1-k do a[m]:=a[m-1];
a[position-k]:=bufer;
k:=k+1;
position:=position+2;
end;
end;
part:=part*2;
end;
for position:=0 to (point-1) do
write(a[position],' ');
end.
Эту программму хотел модифицировать на основе рабочей которая правильно выполняет только первый этап(делит массив на четные и нечетные):
uses crt;
var position,k,n,m,bufer,point,q,part,d:integer; a: array [0 .. 4096] of integer;
begin
point:=16;
for position:=0 to (point-1) do a[position]:=position;
part:=2;
position:=2;k:=1;
for n:=1 to round(point/part-1) do
begin
bufer:=a[position];
for m:= position downto position+1-k do a[m]:=a[m-1];
a[position-k]:=bufer;
k:=k+1;
position:=position+2;
end;
for position:=0 to (point-1) do
write(a[position],' ');
end.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.