Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2009, 17:05   #1
shelest
Пользователь
 
Аватар для shelest
 
Регистрация: 01.11.2009
Сообщений: 99
Вопрос Массивы. Необычная сортировка

В массиве A наименьший элемент поместить на первое место, наименьший из оставшихся на последнее,следующий по величине на второе, следующий на предпоследнее и так по середины массива.


подскажите плиз алгоритм.
shelest вне форума Ответить с цитированием
Старый 05.11.2009, 21:49   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Читайте свой первый пост, это и есть алгоритм действий.
А более конкретно (как один из вариантов): объявляется еще один массив с тем же самым количеством элементов как в исходном. Исходный массив сортируется в возрастающем порядке. Элементы из исходного массива копируются (переносятся) во второй в том порядке, какой описан в алгоритме задания.
Скандербег вне форума Ответить с цитированием
Старый 05.11.2009, 23:18   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

забавная задачка..
исключительно, чтобы мозги не заплесневели, размялся..
Код:
const n = 15;
var
  a: array[1..n] of integer;
  i, Beg, Fin, CurI, kTemp : integer;
  MinIndex : integer;

begin
  { заполняем массив}
  for i:=1 to n do a[i] := n-i+1;

  { выводим массив}
  WriteLn('---- исходный массив ----');
  for i:=1 to n do Write(a[i]:3);
  WriteLn;

  { собственно алгоритм "необычной" сортировки}
  Beg := 1;
  Fin := n;
  CurI := 1;

  while CurI<>((n div 2)+1) do
  begin
     { ищем минимум от Beg до Fin }
     MinIndex := Beg;
     for i:=Beg to Fin do
       if a[i]<a[MinIndex] then
         MinIndex := i;

     { вот собственно процедура записи минимального значения }
     if CurI<((n div 2)+1) then begin
         { пишем в Beg }
         if MinIndex<>Beg then begin
           kTemp := a[Beg];
           a[Beg] := a[MinIndex];
           a[MinIndex] := kTemp;
         end;
         Inc(Beg);
         CurI := Fin;
     end
     else begin
         { пишем в Fin }
         if MinIndex<>Fin then begin
           kTemp := a[Fin];
           a[Fin] := a[MinIndex];
           a[MinIndex] := kTemp;
         end;
         Dec(Fin);
         CurI := Beg;
     end;
  end;

  { выводим результат }
  WriteLn('---- результат массив ----');
  for i:=1 to n do Write(a[i]:3);
  WriteLn;


end.
p.s. язык прграммирования не указан, поэтому позволил себе взять Паскаль

p.p.s. на красоту и изящество решения не претендую.
наверняка можно решить проще и изящнее... ну оставляю это другим...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу в C++ на массивы + сортировка методом Шелла Exact Помощь студентам 2 18.06.2009 14:44
Необычная степень числа в сумме ряда Cкулаб Общие вопросы Delphi 4 08.06.2009 20:27
Совсем необычная раскраска DBGrid-a _SERGEYX_ Общие вопросы Delphi 2 26.09.2008 09:51
(с)Массивы.Сортировка по спирали. arah Помощь студентам 3 16.12.2007 21:12