Ответ 1
Я предполагаю, что вы говорите о Java здесь.
Итак, цикл будет стоить время O (n), мой вопрос в том, будет ли Arrays.sort() стоить больше времени?
Да, Arrays.sort(int[])
во всех реализациях стандартной библиотеки Java, которые я знаю, является примером сравнения и должен иметь худшую сложность Ω (n log n). В частности, Oracle Java 7 использует вариант с двоякоприводным quicksort для целых перегрузок, который на самом деле имеет наихудший случай Ω (n 2).
и будет ли Arrays.sort() стоить больше места?
По всей вероятности, он будет использовать пространство ω (1) (что означает другое да, использование пространства не O (1)). В то время как невозможно реализовать сортировку на основе сравнения только с постоянным дополнительным пространством, это очень непрактично.
Тем не менее, при определенных условиях можно сортировать определенные типы данных в линейном времени, см., например:
- http://en.wikipedia.org/wiki/Counting_sort
- http://en.wikipedia.org/wiki/Pigeonhole_sort
- http://en.wikipedia.org/wiki/Radix_sort
С постоянным диапазоном входных целых чисел (например, если abs(A[i]) <= C
для некоторой константы C), то подсчет сортировки сортировки и радикса действительно использует только время O (n) и O (1), поэтому это может быть полезно.