web-dev-qa-db-fra.com

Arrays.sort () augmentera-t-il la complexité temporelle et la complexité spatio-temporelle?

Il y a un problème lié au tableau, il faut que la complexité du temps soit de O(n) et la complexité de l'espace de 0 (1).

Si j'utilise Arrays.sort(arr) et que j'utilise une boucle for en une seule boucle, par exemple:

public static int hello(int[]A){
  Arrays.sort(A);
  for(int i=0;i<A.length;i++){
     ....................
  }
  return ....;

}

La boucle coûtera donc O(n) temps. Ma question est la suivante: Arrays.sort() coûtera-t-il plus de temps? Si j'utilise Arrays.sort(), cette complexité temporelle sera-t-elle toujours O (n)? Et Arrays.sort() coûtera-t-il plus d'espace?

13
aminy

Arrays.sort (int [] a) dans le JDK récent est implémenté avec l'algorithme Quicksort à double pivot qui a une complexité moyenne de O (n log n) et est exécuté sur place (par exemple, ne nécessite pas d'espace supplémentaire).

1
apangin

Selon la méthode Java jvm 8 javadocs de la méthode Arrays.sort (): 

L'algorithme de tri est un Quicksort à deux pivots de Vladimir Yaroslavskiy, Jon Bentley et Joshua Bloch. Cet algorithme offre des performances O (n log (n)) sur de nombreux ensembles de données entraînant la dégradation d'autres tri rapides en performances quadratiques. Il est généralement plus rapide que les implémentations Quicksort traditionnelles (à un pivot).

Cela augmentera donc la complexité de votre temps de O(n) à O (n log (n))

0
pedrogonzalezj