Примечание. Этот вопрос был строго отредактирован с тех пор, как я впервые разместил его здесь. Правила были перенесены сюда , прочитайте их, прежде чем публиковать любой ответ, чтобы понять цель этого. Это был первый вопрос, созданный в категории кода троллинга .
Представьте себе ленивого пользователя в Stack Overflow, который задает этот вопрос:
Мне нужна программа, в которой пользователь вводит массив значений типа double, а программа выводит отсортированный массив. Не могли бы вы дать код?
Как вы могли бы создать кусок кода, который будет троллить этого пользователя? Создайте фрагмент кода, который окажется полезным для неопытного программиста, но на практике совершенно бесполезен.
Победителем является наиболее проголосованный ответ, за исключением случаев, когда ответ каким-то образом не соответствует критериям (для определения соответствия требованиям проверьте описание вики- кода троллинга кода ). Если ранее принятый ответ с наибольшим количеством голосов был побит в будущем по количеству голосов, полученных после принятия, новый лучший ответ принимается, а предыдущий не принимается. В случае ничьей я выберу победителя по своему усмотрению или просто подожду немного больше.
Ответы без кода не принимаются. Они могут быть веселыми и получить несколько голосов, но они не будут приняты.
Правила можно найти в описании тега .
Примечание: это вопрос кодового троллинга . Пожалуйста, не воспринимайте вопрос и / или ответы всерьез. Больше информации здесь .
источник
Ответы:
Иногда сообщество здесь не любит помогать с домашней работой. Вот почему вы получаете столько ответов на шутки. Но я люблю помогать. Вот полное решение в «C» (так как я предполагаю, что вы хотите научиться «программированию», а не «написанию сценариев» с Java или Ruby). Я включил много советов, которые я хотел бы знать, когда я впервые учился
источник
1st, 2th, 3th, 4th...
и оператор downto - очень продвинутые методы программирования на Си.sscanf(input, "%5s", &input[0])
, иначе могут быть ошибки переполнения при разборе ввода. И вход должен быть объявленchar input[sizeof(int)+1]
для обратной совместимости с 64-битными системами.i==1?"st":"th"
хахаха ...Вот это в Java. Это полный обман, неприемлемый и не поддающийся исправлению, потому что он создает базу данных MySQL, вставляет туда число, делает выбор с предложением ORDER BY и выводит числа, заданные MySQL. На самом деле сортировку выполняет MySQL, а не программа.
источник
C # - Там нет убийства, как перебор
Прежде всего, дорогой GiMmEtHaCoDeZ, давайте попробуем разбить вашу задачу:
Поскольку «Разделяй и властвуй» является очень важной стратегией при работе с программными проблемами, давайте решать их по одному
1. Чтение
Еще одна важная проблема в программном обеспечении - это универсальность. Поскольку не указано, как пользователь будет вводить числа, это может произойти через консоль, через файл, через веб-сервис и т. Д. Возможно, даже какой-то метод, который мы пока не можем придумать. Поэтому важно, чтобы наше решение могло учитывать различные типы ввода. Самый простой способ добиться этого - извлечь важную часть в интерфейс, скажем,
где
DoubleArrayReaderType
перечисление дано сТакже важно сделать программное обеспечение тестируемым с нуля, поэтому реализация интерфейса будет
Далее, логичный вопрос - как мы узнаем, чтобы загрузить соответствующее
IDoubleArrayReader
в код. Это легко, если мы используем простую фабрику:Обратите внимание, что мы используем отражение для загрузки всех активных читателей, поэтому любые будущие расширения будут автоматически доступны сейчас, в основной части нашего кода, который мы просто делаем:
2. Обработка (сортировка)
Теперь нам нужно обработать, то есть отсортировать полученные числа. Обратите внимание, что шаги полностью независимы друг от друга, поэтому для подсистемы сортировки не имеет значения, как были введены числа. Кроме того, поведение сортировки также может быть изменено, например, нам может потребоваться ввести более эффективный алгоритм сортировки. Итак, естественно, мы извлечем запрошенное поведение обработки в интерфейсе:
А поведение сортировки просто реализует интерфейс:
Конечно, нам понадобится фабрика для загрузки и управления экземплярами обработки.
3. Написание вывода
Здесь особо нечего сказать, так как это процесс, который отражает ввод. Фактически, мы могли бы объединить фабрики чтения и записи в одно
DoubleArrayInputOutputFactory
, например так:Собираем все вместе
Наконец, наша основная программа будет просто использовать всю эту удивительность, которую мы уже создали, поэтому код будет просто:
где, например, мы могли бы определить
reader
,writer
иprocessor
используяисточник
Еще более буквальная интерпретация:
то есть «массив» отсортирован.
источник
sort.sh
и позвонить какsh sort.sh "an array of doubles"
"an array of doubles"
может быть передан в сценарий в качестве аргумента командной строки.Perl
Из всего, что я сделал для CodeGolf.SE, это заняло больше всего времени, по крайней мере, несколько часов.
Вход имеет форму,
[2,4,5,7,7,3]
а выход имеет форму[2,3,4,5,7,7]
.У меня нет времени объяснять сейчас ... вернусь позже.В любом случае, в Perl есть нечто, называемое анонимным массивом. Это массив, но у него нет имени. Однако мы знаем, что это ссылка (ячейка памяти), которая на нее указывает. Ряд чисел в квадратных скобках создает анонимный массив и возвращает ссылку на него.
Этот ответ состоит из серии анонимных массивов, ссылки на которые хранятся в
@_
. Входные данные превращаются в анонимный массив. Затем мы создаем другие анонимные массивы, каждый элемент которых является ссылкой на элемент в предыдущем массиве. Вместо сортировки элементов в массиве мы сортируем указатели на элементы в этом массиве. Также мы создаем новый массив для каждого шага (и более) в операции сортировки.источник
$_
это пустая строка в этой точке. Я сохранил свой желаемый вывод$\
, который является разделителем выходных записей.питон
Предоставляет пользователю отсортированный массив, удаляя все элементы не в отсортированном порядке из входного массива.
Алгоритм просматривает список, добавляя каждый элемент, только если он не сделает список несортированным. Таким образом, вывод представляет собой отсортированный список, но не тот, который содержит все элементы исходного списка. Если операция просто проверяет, находится ли список в отсортированном порядке, он может не заметить, что в выводе отсутствуют значения.
источник
sys.stdin.read()
опечатки или часть реального троллинга-ответа? Конечно, это помешало бы OP выдавать массив в качестве входных данных и продолжать ждать результата ...O(n)
Рода алгоритм. Приятно.Баш, 54 персонажа
Многие ответы, использующие медленные неэффективные языки, такие как C и Python ... давайте немного ускорим процесс, предложив решение на языке всех языков сценариев: Bash.
Я знаю, о чем ты думаешь - Bash даже не может обработать арифметику с плавающей запятой, так как это будет сортировать, верно? Хорошо, вот моя реализация мощного алгоритма SleepSort:
Программа снабжена вводом в качестве аргументов командной строки. Образец прогона:
Это также имеет то преимущество, что, возможно, является самым коротким из всех рабочих алгоритмов, представленных здесь. Это верно - одна могущественная строка bash , использующая только встроенные функции bash и не вызывающая никаких внешних двоичных файлов (то есть, если вы не учитываете чисто необязательный подробный вывод). В отличие от bogosorts, его время выполнения является детерминированным.
Совет: Эффективная оптимизация заключается в разделении входных чисел на коэффициент перед сортировкой. Реализация оставлена на усмотрение читателя.
Редактировать:
Укороченная версия для гольфа с 54 символами и менее симпатичной печатью:
источник
/proc/cpuinfo
.JavaScript имеет встроенную
sort()
функцию, вы можете использовать ее так:... о, совершенно забыл упомянуть, это сортирует в лексикографическом порядке, то есть
10 < 9
и9 < -100
. Вероятно, это то, что вы ожидаете в любом случае.источник
(jPL) язык программирования jQuery
Вы должны использовать jQuery для этого. Простое решение этой проблемы заключается в следующем:
источник
$
, использование массивовa
и результатыwindow.prompt
asp
.С
Это решение сочетает в себе краткость и доступ на уровне ОС, предоставляемые C, с мощными программными компонентами многократного использования в GNU / Linux:
источник
#!/usr/bin/sort
.Рубин
Довольно очевидный.
Или требовать, чтобы входные данные действительно были "массивом парных чисел":
Не использовать
gets.chomp
для дополнительного зла. Также использование регулярных выражений после трейлинга до, что я даже не знал, что вы могли бы сделать (спасибо Ян Дворжак), чтобы еще больше запутать ОП!источник
an array of doubles
.gets
вместоgets.chomp
).Python3.3
Троллинг заключается в том, чтобы предоставить идеально работающее решение, которое делает именно то, для чего предназначен OP, но таким образом:
Таким образом, этот ответ значительно увеличил бы разочарование студента, насмехающегося над его запросами с совершенно правильными ответами с определенной точки зрения.
(Не читайте, если считаете, что вы понимаете приведенный выше код)
Я должен добавить, что троллинг также увеличивается за счет того, что реализованный алгоритм сортировки
источник
C - медленный, сложный в использовании, неприемлемый стиль кодирования
Сам алгоритм сортировки известен как медленная сортировка и имеет наилучшую сложность (симплексность) около n ^ (log n / 2) . Алгоритм был опубликован Андреем Бродером и Хорхе Столфи в их замечательной статье «Алгоритмы Пессимал и анализ симплексности», которую я очень рекомендую для хорошего смеха и пищи для размышлений.
Однако сама сортировка бесполезна, поэтому нам нужен способ ввода данных, которые он хочет отсортировать. Разбор двойных чисел - это боль, так почему бы не вводить их побайтно.
Чтобы доказать, что это работает:
В итоге имеем:
источник
Рубин, злой Богосорт! (Бонус: bogosort по вводу пользователя)
«Злые» повороты:
.map &:to_f
добавлением ко второй строке, но OP может не знать, чтоchomp
так что последний номер имеет таинственный перевод строки в концеstrip
так что есть загадочный пробел вокруг чисел, если ввод с пробелом через запятую (например, пробел в1.5, 2
)Или как насчет сортировки по пользовательскому вводу ?! >: D
источник
Кобол
Конечно! "Даже обезьяна может сделать это!"
Вот простая программа на языке COBOL , которая отсортирует входные данные для вас. Прочитайте комментарии, чтобы увидеть, насколько это тривиально и расширяемо. Реальные преимущества этого в том, что это проверенный и настоящий механизм, он не опирается на новые и относительно непроверенные языки, такие как Java и все, что связано с Интернетом или от Microsoft. Он очень эффективно компилируется, и подобные процедуры используются самыми успешными финансовыми компаниями в списке Fortune500 и другими лидерами отрасли. Этот код был рассмотрен многими экспертами и признан отличным механизмом сортировки.
источник
ОП никогда не говорил, КАК сортировать их ... или каково его определение двойников. Предполагая тип данных,
double
но интерпретируя его как дубликаты . Используя JavaScript здесь.Результат: чередующийся порядок
[4, 11, 4, 9, 5, 7, 6, 7]
источник
PHP
Вот полная реализация с обработкой ошибок. Это самый быстрый для любого
array of doubles
.источник
Следующая перестановка в C ++ работает, возвращая true, когда массив отсортирован, и false в противном случае (после того, как он переставляет). Таким образом, вы должны отсортировать массив, а затем использовать его в течение заданного времени, как указано выше (поэтому он сделает полный круг обратно в отсортированный массив).
источник
next_permutation
для своего ответа, но это намного чище, чем я имел в виду.[решение с помощью точного неверного направления]
Пожалуйста, прочитайте соответствующий стандарт, IEC 60559: 1989 Спецификация для двоичной арифметики с плавающей запятой для микропроцессорных систем , которую вы можете приобрести здесь . В сноске к §5.10 Подробности предиката totalOrder отмечается, что:
Таким образом, мы видим, что невозможно написать код для сортировки двойников. Это вопрос с подвохом. Ха-ха, очень умный! Пожалуйста, скажите своему профессору, что я наслаждаюсь его курсом.
[править: ничто не требует от меня, чтобы я не предполагал, что проблема требует полного порядка]
источник
Злой JavaScript:
ОП, я не хочу давать вам все, поэтому я позволю вам выяснить, как получить информацию от пользователя самостоятельно (подсказка: используйте
prompt
).Если у вас есть это, вот функция, в которую вы можете передать свой массив для сортировки. Вам просто нужно предоставить массив, самое низкое значение в массиве и приращение:
Вот скрипка, чтобы увидеть это в действии с примером пользовательского ввода [1.5, -3.5, 12, 10, -19.5].
Примечание. Помимо неэффективного, сложного и нерасширяемого решения рассматриваемой проблемы, это будет особенно неприятно, если ОП не знает о математике с плавающей запятой. Например, если пользовательский ввод
[8.1, 5, -.8, 2.3, 5.6, 17.9]
и ОП выбирает простые значения (то естьminimumVal=-.8
иincrement=.1
), программа будет работать вечно. В связи с этим я в настоящее время являюсь счастливым владельцем двух неработающих вкладок браузера из-за этой самой проблемы :)Примечание II: я чувствовал себя отвратительно даже при написании кода выше.
Примечание III: МВА ХАХАХАХА!
источник
Вот фактический ответ, который мне нравится для Java:
Никаких объяснений, смущает ОП , но работает и получит положительные отзывы от более опытных программистов.
Еще один похожий ответ :
Косвенно приказывая ОП провести свое собственное исследование, давая ему неопределенный правильный ответ. Без дальнейших исследований ФП все еще запутался . Мне также нравится, что ссылка указывает на более старую документацию.
источник
Генетический алгоритм / метод Монте-Карло для задачи сортировки в JAVA
Проблема сортировки давно известна вычислительной технике, и было найдено много хороших решений. В последние годы были достигнуты большие успехи в области биокомпьютинга, и изучение того, как биология решает проблемы, показало большую помощь в решении сложных задач. Этот алгоритм сортировки использует лучшие из этих идей, чтобы использовать их для решения проблемы сортировки. Идея довольно проста. Вы начинаете с неупорядоченного массива и узнаете, как это уже отсортировано. Вы даете ему оценку его «сортировки», а затем переставляете массив случайным компонентом - как в биологии, где неясно, как будут выглядеть дети, даже если вы знаете все о родителях! Это часть генетического алгоритма. Вы создаете потомство этого массива, так сказать. Затем вы видите, отсортировано ли потомство лучше, чем родитель (иначе говоря, выживание наиболее приспособленных!). Если это так, вы продолжаете использовать этот новый массив в качестве отправной точки для построения следующей перестановки и так далее, пока массив не будет полностью отсортирован. Крутая вещь в этом подходе состоит в том, что он занимает меньше времени, если массив уже немного отсортирован с самого начала!
Дополнительно
источник
питон
Сортирует массив (список) по сумме 3- го и 5- го десятичных знаков.
источник
lambda x:
и заменив его наx
. Тем не менее, начинающий кодер никогда не узнает этого, так что слава!C ++
Это работает ... в конце концов.
Вот мой алгоритм сортировки:
Вот полная программа:
источник
Здесь полюбуйтесь:
Этот фрагмент кода отображает массив и просит пользователя ввести наименьший двойной массив. Затем он добавляет число в список отсортированных чисел, удаляет двойное число из массива и отображает оставшиеся номера массива.
* Неверное истолкование: слабое место, но ОП точно не ожидает, что программа попросит пользователя помочь в сортировке.
Обман: пользователь выполняет сортировку.
* Производительность: для каждого числа массива требуется обход сервера, и пользователю необходимо найти наименьшее число вручную. Производительность не может быть намного хуже.
* Неприемлемо: я думаю, что получил это. И удачи в повторном использовании. Хуже всего то, что пользователь может избавиться от 90% кода и периодически повторять циклы, чтобы найти наименьшие значения и каждый раз удалять их, что даст ему один из наименее эффективных алгоритмов сортировки.
* Творческий и зла: ты мне.
источник
Javascript Интеллектуальный Дизайн Сортировать
источник
Python - требуется # 1
Этот код будет сортировать двойные числа в лексикографическом порядке, а не увеличивать числовой порядок, создавая префиксное дерево цифр и затем рекурсивно повторяя их.
Это работает
n log n
вовремя, и на самом деле это умный способ сохранить отсортированный список в противном случае, но, к сожалению, для OP, он делает совершенно не то, что нужно.источник
2, 1, 3, 8, 5
.Сортирует массив двойников. В Java:
Например:
[0.0, 1.5, 123]
выходит из несортированного двоичного представления
011111111111000000000000000000000000000000000000000000000000000100000001011110110000000000000000000000000000000000000000000000
в элегантно отсортированном
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111
источник
Отредактируйте за @kealist, я думаю, что было бы лучше, если бы прокомментировать, чтобы разделение казалось правдоподобным. В Реболе ...
Подчеркивая, что они на самом деле не знают, что такое двойное число, и могут поверить, что список двойных чисел - это просто набор чисел, умноженных на два.
источник
Умышленное недопонимание вопроса:
Используя рекурсивный подход:
Сортированный массив гарантированно будет выведен в какой-то момент для любого типа данных в массиве, даже для любого вида порядка сортировки и даже любого вида разделителя для ввода, что делает этот подход чрезвычайно гибким. Его главный недостаток в том, что он работает довольно медленно для больших массивов, но вы можете легко решить эту проблему с помощью многопоточности.
источник