Как распечатать целые числа из несортированного массива const в порядке убывания, копию которого я не могу создать? - PullRequest
0 голосов
/ 17 марта 2020

Например, если дано {3, 0, 9, 99, 1}, я бы хотел, чтобы оно было {99, 9 ,3, 1, 0}. Я пытался создать другое хранилище массива значения, так как каждый раз нахожу следующее максимальное значение, но не могу реализовать. (новый C программист). Любая помощь приветствуется, хотел бы попытаться решить эту проблему в O (n ^ 2)

1 Ответ

1 голос
/ 17 марта 2020

Вопреки тому, что вы утверждаете, я не думаю, что проблема заключается в реализации решения. Если бы это было так, вы бы указали, что у вас возникли проблемы при реализации. Но вы этого не сделали, поэтому я думаю, что проблема заключается в том, чтобы придумать сам алгоритм.

Вы запросили решение, требующее O (1) памяти и O (N ^ 2) времени. Это на самом деле больше, чем требуется. При сортировке массива на месте и последующей его печати решение, требующее O (1) памяти и O (N log N), составляет возможно .

Но давайте предположим, что вы хотели не -разрушительное решение, означающее, что никто не изменяет входной массив. Ниже приведено такое решение, требующее O (1) памяти и O (N ^ 2) времени:

  1. Set max = максимальное целое число.
  2. Set count = 0.
  3. Хотя число меньше количества элементов в массиве,
    1. Установить следующий = минимальное целое число.
    2. Для каждого элемента массива:
      1. Если элемент значение равно max,
        1. Вывести значение элемента.
        2. Счетчик приращений.
      2. Иначе,
        1. Если значение элемента больше следующего и меньше максимального,
          1. Установить рядом со значением элемента
    3. Установить макс = следующее.

Каждый из этих шагов тривиален для реализации в C.

...