Я нашел способ, который улучшает (насколько я проверял) алгоритм быстрой сортировки выше того, что уже сделано. Я работаю над его тестированием, а затем хочу рассказать об этом. Тем не менее, я был бы признателен за помощь в некоторых вещах. Итак, вот мои вопросы. Весь мой код находится в С++, кстати.
-
Один из видов, которые я сравнивал с моей quicksort, - это std:: sort из стандартной библиотеки С++. Однако, похоже, он очень медленный. Я только сортирую массивы ints и longs, но, похоже, он примерно в 8-10 раз медленнее, чем мой быстроходный и стандартный quicksort Bentley и McIlroy (и, возможно, Sedgewick). У кого-нибудь есть идеи относительно того, почему это так медленно? Код, который я использую для сортировки, просто станд:: сортировать (а, а + numelem); где a - массив longs или ints, а numelem - количество элементов в массиве. Числа очень случайны, и я пробовал разные размеры, а также различные количества повторяющихся элементов. Я также пробовал qsort, но это еще хуже, как я ожидал. Изменить: игнорировать этот первый вопрос - он был разрешен.
-
Я хотел бы найти более хорошие реализации быстрой сортировки, чтобы сравнить с моей быстрой сортировкой. Пока у меня есть Bentley-McIlroy, и я также сравнил с первой опубликованной версией быстрорежущей машины с двойным стержнем Владимира Ярославского. Кроме того, я планирую портировать timsort (который представляет собой сортировку слияния, я считаю) и оптимизированную двоякую быструю сортировку из источника jdk 7. О каких других хороших реализациях быстрой сортировки вы знаете? Если они не на C или С++, это может быть хорошо, потому что я хорошо переношу, но я бы предпочел C или С++, если вы знаете о них.
-
Как бы вы порекомендовали выпустить слово о моих добавлениях в quicksort? До сих пор мой quicksort, по-видимому, был значительно быстрее, чем все другие операторы, которые я тестировал. Основным источником его скорости является то, что он обрабатывает повторяющиеся элементы намного эффективнее других методов, которые я нашел. Он почти полностью уничтожает поведение худшего случая, не добавляя много времени на проверку повторяющихся элементов. Я опубликовал об этом на форумах Java, но не получил ответа. Я также пробовал писать в Jon Bentley, потому что он работал с Владимиром на его двухповоротной быстродействующей машине и не получил ответа (хотя меня это не удивило). Должен ли я написать статью об этом и поместить ее на arxiv.org? Должен ли я размещать сообщения на некоторых форумах? Есть ли списки рассылки, на которые я должен писать? Я работаю над этим в течение некоторого времени, и мой метод является законным. У меня есть некоторый опыт публикации публикаций, потому что я кандидат в области вычислительной физики. Должен ли я попытаться приблизиться к кому-то в отделе компьютерных наук моего университета? Кстати, я также разработал другую быстродействующую быстродействующую двойную точку, но это не лучше, чем моя однопользовательская быстродействующая сортировка (хотя она лучше, чем двойная смены с двумя наборами данных с несколькими наборами данных).
Я очень ценю вашу помощь. Я просто хочу добавить все, что могу, в вычислительный мир. Я не заинтересован в патентовании этой или какой-то абсурдной вещи.