Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сортировка одномерных массивов

Автор: Jaxx 27.04.2004 21:38

Дана целочисленная матрица с положительными и отрицательными числами (то есть одномерный массив из 10 элементов). Переставить элементы так, чтобы сначала шли отрицательные, а потом положительные элементы, не нарушая их взаимного расположения в каждой группе (то есть если был массив «1 -2 3 -4 5 -6 7 -8 9 -10», то должен стать массивом следующим «-2 -4 -6 -8 -10 1 3 5 7 9»).
Нужно довольно срочно (в ближайшие 2 дня).
Заранее спасибо.

Автор: Dark 28.04.2004 6:56

Вот лови, здесь 2 раза использован один и тот же алгоритм сортировки, помоему пузырьковая =)

Код

uses crt;
var mas:array[0..19] of integer;
   i:byte; {счетчик}
   t:boolean;{ключ}
   temp:integer;

begin
clrscr;
randomize;

{Генерируем массив}
for i:=0 to 19 do mas[i]:=random(100)-50;
for i:=0 to 19 do write(mas[i],' ');
writeln;

{Сортируем по возрастанию ВСЕ элементы}
t:=false;
while (t=false) do
 begin
  t:=true;
  for i:=0 to 18 do
   if (mas[i+1]<mas[i]) then
    begin
     temp:=mas[i];
     mas[i]:=mas[i+1];
     mas[i+1]:=temp;
     t:=false;
    end;
end;

for i:=0 to 19 do write(mas[i],' ');
writeln;

{Сортируем по убыванию ТОЛЬКО ОТРИЦАТЕЛЬНЫЕ элементы}
t:=false;
while (t=false) do
begin
 t:=true;
 for i:=0 to 18 do
  begin
   if (mas[i+1]>=0)  then break;
   if (mas[i+1]>mas[i]) then
     begin
       temp:=mas[i];
       mas[i]:=mas[i+1];
       mas[i+1]:=temp;
       t:=false;
     end;
end;
end;

for i:=0 to 19 do write(mas[i],' ');
writeln;
readkey;
end.



Надеюсь поможет =) :p5:

Автор: Jaxx 30.04.2004 18:09

Я тоже наделся...Не помогло. Все равно не понимаю. Отсортировать на отрицательные и положительные получается, а вот по порядку их расположить - не очнь выходит.