Возьмите массив целых чисел, содержащий отрицательные числа, положительные числа и нули. Сгруппируйте его с одной итерацией и поместите так , чтобы все отрицательные числа шли первыми, за которыми следовали все нули, а затем все положительные числа.
Пример:
Input: 5, 3, 0, -6, 2, 0, 5
Output: -6, 0, 0, 3, 2, 5, 5
Обратите внимание, что числа не должны быть полностью отсортированы: просто отсортированы по знаку.
Итак, окончательный массив будет выглядеть так: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, +
правила
- Вы можете использовать только входной массив и постоянный объем дополнительной памяти (т.е. вы не можете создавать больше массивов)
- Вы можете использовать только один цикл, который может выполняться только столько раз, сколько длина массива. Вы не можете использовать встроенные функции, которые скрывают какой-либо цикл. Это включает в себя встроенные функции сортировки.
- Результат должен быть в формате, который я описал
Победителем станет тот, кто предоставит самый короткий код (в байтах), который изменит исходный массив в правильный формат (как описано выше).
code-golf
number
sorting
array-manipulation
Ионика Бизэу
источник
источник
sort(...)
не подходит, поскольку, вероятно, он выполняет более одной итерации.Ответы:
С 92
Вероятно, это может быть уменьшено как минимум на 10 байт; Есть много выражений, которые пропадают.
Первый аргумент должен указывать на начало массива; вторая должна указывать после конца массива.
Развернутый с генератором случайных испытаний:
источник
STATA 242
Точно следует за страницей википедии. Спасибо @PeterTaylor
Принимает ввод как разделенный пробелами набор чисел из стандартного ввода и выводит их как таковые, а также выводит стандартный вывод.
источник
Python 2: 116 байт
Это переведенный на Python перевод голландского национального флага с псевдокодом.
Возможные 112 байтов
Не уверен, если это разрешено. Создает второй массив размером 3 (постоянный объем дополнительной памяти!).
источник
С, 90
Простая реализация алгоритма в статье в википедии согласно комментарию Питера Тейлора по этому вопросу.
Ожидает найти данные в массиве, называемом
a
как другой ответ C.n
,p
Иz
являются указателями для вставки отрицательных и положительных чисел и нулей.n
иp
принимаются в качестве аргументов, указывающих на первый и последний элементы данных.источник
ECMAScript 157 байт
Принимает числа как разделенные пробелами или запятыми набор из диалогового окна приглашения и возвращает результат с диалоговым окном предупреждения.
источник
PHP (146)
http://3v4l.org/ivRX5
Относительно многословный синтаксис PHP здесь немного болезненный ...
источник
Реболь -
149142140Это прямой порт голландского национального флага в псевдокоде Википедии. Ниже показано, как это выглядит безымянным:
Пример использования:
NB. Массивы Rebol (блоки) не используют запятые -
[5 3 0 -6 2 0 5]
И если все в порядке, то это превращает это в функцию, которая принимает массив и модифицирует его на месте, тогда мы можем уменьшить его до 128 символов:
Фактически, если вам не нужно возвращать массив (т.е. просто изменять), вы можете сбрить еще 1 символ.
источник
C ++
Решение без игры в гольф: n считает негативы, добавленные к передней части массива. Для каждого элемента, если отрицательный обмен с элементом в n, если нулевой обмен с элементом в n + 1, иначе обмен с последним элементом.
источник
CJam -
7267Вход:
[5 3 4 0 -6 2 0 5]
Выход:
[-6 0 0 4 2 3 5 5]
Попробуйте это на http://cjam.aditsu.net/
Объяснение:
Это еще одна реализация алгоритма из Википедии, использующая
T
дляi
иU
дляj
(оба автоматически инициализируются в 0).источник