14 Алгоритмы сортировки и массивы PHP
В этой статье я расскажу вам о бенчмарке алгоритмов сортировки, написанном на PHP. Представлено 14 алгоритмов:
- быстрая сортировка
- подсчетСортировка
- гребенчатая сортировка
- heapSort
- Сортировка слиянием
- оболочкаСортировать
- выборСортировка
- вставкаСортировка
- гномСортировка
- комбинированная пузырьковая сортировка
- коктейльСортировать
- нечетная-четная сортировка
- пузырекSortWithFlag
Алгоритмы расположены не в алфавитном порядке, а в порядке убывания скорости их выполнения при сортировке массива из 8 тысяч элементов.
Представлены следующие размерности массивов, используемые для сортировки:
- 1
- 100
- 200
- 400
- 600
- 800
- 1000
- 5000
- 10000
15000- 20000
- 25000
- 30000
Каждое измерение выполнялось с разным заполнением массива, которое передается в функцию сортировки.
- В первом случае массив был заполнен случайными значениями с интервалом (1, n), где n — размерность массива. 963 или около 9.2233720368548E+18
Каждое измерение было выполнено трижды и получено среднее арифметическое
Массивы до 1000 элементов
В этой категории задействованы все функции сортировки.
Массивы до 30 тысяч элементов
В данном случае задействованы 5 самых быстрых алгоритмов: счетная, быстрая, гребенчатая, куча и сортировка слиянием.
Массивы до 200 тыс. элементов
В данном случае задействованы те же 5 алгоритмов: счетная, быстрая, гребенчатая, куча и сортировка слиянием.
Массивы до 2 миллионов элементов
В последнем раунде из 2 миллионов элементов использовались два алгоритма: сортировка по счету и быстрая сортировка.
Резюме
QuickSort по праву считается неплохим алгоритмом. CountingSort действительно хорош в небольших диапазонах значений; в противном случае он не может управлять из-за нехватки памяти. Коктейльная сортировка оказалась плохим выбором для случайных значений. Пузырьковый сорт и его модификации не применимы к практическому использованию.
Исходный код всех алгоритмов + результаты: https://drive.google.com/file/d/0B63HSL7JD630VWdSSFgwdHR5RkU/edit?usp=sharing
В качестве забавного упражнения используйте встроенную функцию сортировки. Построение функции сортировки в интерпретируемом коде PHP никогда не будет быстрее, чем вариант C, который использует sort().
cursor.sort() — Руководство по MongoDB
Главная Документация → Руководство MongoDB
На этой странице
- Определение
- Поведение
- Примеры
- Возврат в естественном порядке
Определение 90 141
-
cursor.sort(sort)
Важный
монгош Метод
На этой странице описан метод
mongosh
. Это , а не . документация для драйвера для конкретного языка, такого как Node.js.Драйверы API MongoDB см. в документации для конкретного языка. Документация драйвера MongoDB.
Задает порядок, в котором запрос возвращает совпадающие документы. Вы должны применить
sort()
к курсору перед получение любых документов из базы данных.Метод
sort()
имеет следующий параметр:Параметр
Тип
Описание
сортировка
документ
Документ, определяющий порядок сортировки набора результатов.
Параметр
sort
содержит пары полей и значений в в следующей форме:{ поле: значение } Документ сортировки может указывать сортировку по возрастанию или по убыванию на существующие поля или сортировать текстовые метаданные оценки.
Поведение
Ограничения
Вы можете сортировать не более чем по 32 ключам.
Согласованность сортировки
Изменено в версии 4.4 .
MongoDB не хранит документы в коллекции в определенном порядке. При сортировке по полю, содержащему повторяющиеся значения, документы содержащие эти значения, могут быть возвращены в любом порядке.
Если требуется последовательный порядок сортировки, включите хотя бы одно поле в
сортировка, содержащая уникальные значения. Самый простой способ гарантировать это
чтобы включить поле _id
в запрос сортировки.
Рассмотрим следующую коллекцию ресторана
:
Park Cafe», «район»: «Манхэттен «}, |
{ «_id»: 2, «name» : «Rock A Feller Bar and Grill», «район» : «Queens»}, |
{ «_id»: 3, «name» : «Empire State Pub», «район» : «Бруклин»}, |
{ «_id» : 4, «имя» : «Stan’s Pizzaria», «район» : «Манхэттен»}, |
{ «_id» : 5, «имя» : «Джейн Гастроном», «район» : «Бруклин»}, |
] ); |
Следующая команда использует метод sort()
для сортировки.
в поле borough
:
db.restaurants.find().sort( { «borough»: 1 } ) |
В этом примере порядок сортировки может быть неверным стойкий, начиная с
поле содержит повторяющиеся значения для обоих Манхэттен
и Бруклин
.
Документы возвращаются в алфавитном порядке по номеру р-н
, но
порядок этих документов с повторяющимися значениями для района
может не
быть одинаковым для нескольких исполнений одного и того же вида. Например,
вот результаты двух разных исполнений вышеуказанной команды:
{ «_id» : 3, «name» : «Empire State Pub», «borough» : «Brooklyn» } |
{ » _id» : 5, «name» : «Jane’s Deli», «район» : «Brooklyn» } |
{ «_id» : 1, «name» : «Кафе Central Park», «район» : «Манхэттен» } |
{ «_id» : 4, «name» : «Stan’s Pizzaria», » район» : «Манхэттен» } |
{ «_id» : 2, «имя» : «Rock A Feller Bar and Grill», «район» : «Квинс» } |
{ «_ идентификатор» : 5, «name» : «Jane’s Deli», «район» : «Brooklyn» } |
{ «_id» : 3, «name» : «Empire State Pub», «borough» : «Brooklyn» } |
{ «_id» : 4, «name» : «Stan’s Pizzaria», «район» : «Манхэттен» } |
{ «_id» : 1, «имя» : «Кафе Центрального парка», «район» » : «Манхэттен» } |
{ «_id» : 2, «имя» : «Rock A Feller Bar and Grill», «район» : «Квинс» } |
В то время как значения для района 9014 5 по-прежнему отсортированы в алфавитном порядке,
порядок документов, содержащих повторяющиеся значения по
р-н
(например, Манхэттен
и Бруклин
) не одно и то же.
Для достижения согласованной сортировки добавьте поле, содержащее исключительно
уникальные значения для сортировки. В следующей команде используется sort()
метод сортировки по обоим полям
и поле _id
:
Поле _id всегда гарантированно содержит исключительно
уникальные значения, возвращаемый порядок сортировки всегда будет одинаковым для
несколько исполнений одного и того же вида.Сортировка по возрастанию/убыванию Укажите в параметре сортировки поле или поля для сортировки и
значение Следующая операция сначала сортирует документы по полю
При сравнении значений разных типов BSON MongoDB использует следующий порядок сравнения, от низшего к высшему:
Подробнее о порядке сравнения/сортировки для определенных типов см. Text Score Metadata Sort Для поиска В следующем образце документа указана сортировка по убыванию
Метаданные Дополнительные сведения см. в разделе Использование сортировки и индексаMongoDB может получать результаты операции сортировки из индекса, который включает поля сортировки. MongoDB может использовать несколько индексов для поддержки операция сортировки , если сортировка использует те же индексы, что и запрос предикат. Если MongoDB не может использовать индекс или индексы для получения сортировки порядок, MongoDB должна выполнить операцию блокирующей сортировки данных. Блокирующая сортировка указывает, что MongoDB должна потреблять и обрабатывать все входные документы для сортировки перед возвратом результатов. Блокирующие сортировки не блокировать одновременные операции над коллекцией или базой данных. Операции сортировки, использующие индекс, часто имеют более высокую производительность, чем блокирующие сорта. Для получения дополнительной информации о создании индексов для поддержки операции сортировки см. в разделе Использование индексов для сортировки результатов запроса. Если MongoDB требует использования более 100 мегабайт системной памяти для
блокирующая операция сортировки, MongoDB возвращает ошибку , если запрос
указывает Чтобы проверить, должна ли MongoDB выполнять сортировку с блокировкой, добавьте Чтобы блокирующая сортировка не потребляла слишком много памяти:
См. также:Ограничения памяти для операций сортировки Ограничение результатов Вы можете использовать Если MongoDB не может получить порядок сортировки с помощью сканирования индекса, тогда MongoDB
использует алгоритм сортировки top-k. Этот алгоритм буферизует первые См. также:Ограничения памяти для операций сортировки Взаимодействие с проекциейКогда набор результатов отсортирован одновременно и по прогнозу, механизм запросов MongoDB всегда будет применить сортировку сначала . Примеры Коллекция
Следующий запрос, который возвращает все документы из
Запрос возвращает документы в неопределенном порядке:
Следующий запрос определяет сортировку поля
Запрос возвращает следующие документы в порядке убывания
Следующий запрос определяет порядок сортировки с использованием полей из
встроенный документ
Запрос возвращает следующие документы, упорядоченные сначала по
Возврат в естественном порядке Параметр |