profile
Размещено 5 лет назад по предмету Информатика от Аккаунт удален

Сортировка. Метод выбора.
Уровень 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.
Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

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

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.