• Сортировка. Метод выбора.
    Уровень A. Массив содержит четное количество элементов. Напишите программу, которая сортирует первую половину массива по возрастанию, а вторую – по убыванию. Каждый элемент должен остаться в «своей» половине.
    Пример:
    Массив: 5 3 4 2 1 6 3 2
    После сортировки: 2 3 4 5 6 3 2 1
    Помогите пожалуйста и (подробно,т.к я не понимаю) , срочно нужно. 20 баллов даю

Ответы 1

  • //Обьявляем дополнительные переменные и главный массив, а также два дополнительных - они будут "половинками".var  a, b, c: array [1..100] of longint;  i, min, n, j, t: longint;begin  //Читаем количество элементов в нашем массиве.  readln(n);    //Читаем массив.  for i := 1 to n do read(a[i]);    //Заполняем первую "половинку".  for i := 1 to n div 2 do b[i] := a[i];    //Заполняем вторую "половинку". Но раз это уже вторая "половинка" главного массива, то и   //цикл теперь должен начинаться со второй части массива, а заканчиваться уже в его конце.  for i := n div 2 + 1 to n do c[i - n div 2] := a[i];    //Теперь отсортируем первую "половинку" методом выбора. Идея этого метода  //основывается на том, что мы ищем минимальный среди неотсортированных элемент,  //а затем просто swap-аем его с тем, который стоит сразу после отсортированных.  for i := 1 to (n - 1) div 2 do   begin    min := i;    for j := i + 1 to n div 2 do      if b[min] > b[j] then        min := j;    if min <> i then begin      t := b[i];      b[i] := b[min];      b[min] := t;    end;  end;    //Затем вторую точно также, только стоит обратить внимание на сравнения.  //Так как надо отсортировать по убыванию, то теперь сравнение перед "swap"-ом  //будет другим.  for i := 1 to (n - 1) div 2 do   begin    min := i;    for j := i + 1 to n div 2 do      if c[min] < c[j] then        min := j;    if min <> i then begin      t := c[i];      c[i] := c[min];      c[min] := t;    end;  end;    //А теперь просто по очереди выводим готовые "половинки", не забывая ставить  //пробел после вывода каждого элемента.  for i := 1 to n div 2 do write(b[i], ' ');  for i := 1 to n - n div 2 do write(c[i], ' ');end.
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years