В общих чертах, существуют алгоритмы сортировки , такие как сортировка по вставкам, сортировка по пузырькам и сортировка по выбору, которые обычно следует использовать только в особых случаях; Быстрая сортировка, которая является наихудшим вариантом O ( n 2 ), но довольно часто O ( n log n ) с хорошими константами и свойствами и которая может использоваться в качестве процедуры сортировки общего назначения; О ( п войти п ) алгоритмы, как слияния сортировки и куча сортировку, которые также являются хорошими алгоритмами общего назначения сортировки; и О ( нO ( n2)O ( n2)O ( n logн )O ( n logн ) , или линейные алгоритмы сортировки для списков целых чисел, таких как основание, ведро и счетные сортировки, которые могут быть подходящими в зависимости от природы целых чисел в ваших списках.O ( n )
Если элементы в вашем списке таковы, что все, что вы о них знаете, это отношение общего порядка между ними, то оптимальные алгоритмы сортировки будут иметь сложность . Это довольно крутой результат, и вы легко сможете найти подробности в Интернете. Алгоритмы линейной сортировки используют дополнительную информацию о структуре сортируемых элементов, а не только общее отношение порядка между элементами.Ω ( n logн )
В более общем смысле, оптимальность алгоритма сортировки тесно связана с предположениями, которые вы можете сделать относительно типа списков, которые вы собираетесь сортировать (а также с моделью машины, на которой будет работать алгоритм, что может сделать даже плохую сортировку в противном случае). Алгоритмы лучший выбор, рассмотрите пузырьковую сортировку на машинах с лентой для хранения). Чем сильнее ваши предположения, тем больше углов может сократить ваш алгоритм. При очень слабых предположениях о том, насколько эффективно вы можете определить «сортировку» списка, оптимальной сложностью в худшем случае может быть даже .Ω ( n ! )
Этот ответ имеет дело только со сложностями. Фактическое время выполнения реализаций алгоритмов будет зависеть от большого числа факторов, которые трудно учесть в одном ответе.