Как описано в этом вопросе :
Dropsort, разработанный Дэвидом Морганом-Маром, является примером «алгоритма сортировки» по линейному времени, который создает список, который фактически отсортирован, но содержит только некоторые из исходных элементов. Любой элемент, который не меньше, чем максимум элементов, предшествующих ему, просто удаляется из списка и удаляется.
Для того, чтобы использовать один из своих тестовых примеров, ввод {1, 2, 5, 4, 3, 7}
урожайности {1, 2, 5, 7}
, как 4
и 3
оба упали за то , что меньше , чем ранее «сортируются» значение, 5
.
Мы не хотим «сортировать» алгоритмы, мы хотим, чтобы они были реальными. Поэтому я хочу, чтобы вы написали программу, которая, учитывая список чисел, выводит список списков DropSorted (чтобы быть полным алгоритмом сортировки, нам нужно объединить эти списки, но объединение двух отсортированных списков уже было сделано ранее, и просить вас сделать это снова - это в значительной степени задавать два вопроса, так что этот вопрос, в частности, является этапом «разделения» нашей полной DropSort).
Однако расположение и содержание наших списков имеет решающее значение. Вывод вашей программы должен быть эквивалентен выводу DropSort, за которым следует DropSort отброшенных значений и так далее, пока у вас не будет только списка отсортированных цепочек. Снова заимствуем существующий набор тестов (и добавим еще два):
Input -> Output
{1, 2, 5, 4, 3, 7} -> {{1, 2, 5, 7}, {4}, {3}}
{10, -1, 12} -> {{10, 12}, {-1}}
{-7, -8, -5, 0, -1, 1} -> {{-7, -5, 0, 1}, {-8, -1}}
{9, 8, 7, 6, 5} -> {{9}, {8}, {7}, {6}, {5}}
{10, 13, 17, 21} -> {{10, 13, 17, 21}}
{10, 10, 10, 9, 10} -> {{10, 10, 10, 10}, {9}} //Note equivalent values aren't dropped
{5, 4, 3, 8, 7, 6} -> {{5, 8}, {4, 7}, {3, 6}}
{0, 2, 5, 4, 0, 7} -> {{0, 2, 5, 7}, {4}, {0}}
Вы можете предположить, что ввод не пуст.
Это код-гольф , поэтому применяются стандартные правила!
{3,4,5,3,4,5,3,4,5}
привести к {{3,4,5,5,5},{3,4,4},{3}}
?
[5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]
?