Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Complexidade de tempo do Collections.sort()

Pessoal, que tipo de algoritmo o metodo sort implementado utiliza?

Pensando em análise de complexidade de tempo e de espaço, fiquei curioso para saber como ele faz isso debaixo dos panos.

2 respostas
solução

Olá Rodrigo, tudo bem com você?

Isso depende da versão do Java; até o Java 6, era utilizado um Merge sort modificado, onde o desempenho linearitmico O(n log n) era garantido. De acordo com a documentação do Java 6:

O algoritmo de ordenação é um mergesort modificado (no qual a fusão é omitida se o elemento mais alto na sublista inferior for menor do que o elemento mais baixo na sublista alta). Este algoritmo oferece desempenho n log (n) garantido. [...] Essa implementação copia a lista especificada em uma matriz, ordena a matriz e itera sobre a lista, redefinindo cada elemento da posição correspondente na matriz. Isso evita o desempenho n 2 log (n) que resultaria da tentativa de classificar uma lista encadeada.

No Java 7, aperfeiçoaram o método e agora o Timsort é utilizado em seu lugar. Ele é um híbrido derivado do Merge sort e do Insertion sort que requer muito menos comparações que n log(n) quando a lista está parcialmente ordenada, ao mesmo tempo que mantém a mesma performance do Merge sort em listas aleatórias e na análise de pior caso.

Nota de implementação: esta implementação é um mergesort estável, adaptável e iterativo que requer muito menos do que n log (n) comparações quando o array de entrada está parcialmente ordenado, enquanto oferece o desempenho de um mergesort tradicional quando o array de entrada está ordenado aleatoriamente. Se a matriz de entrada estiver quase ordenada, a implementação requer aproximadamente n comparações. Os requisitos de armazenamento temporário variam de uma pequena constante para matrizes de entrada quase ordenadas a n / 2 referências de objeto para matrizes de entrada ordenadas aleatoriamente.

Muito obrigado pela resposta completíssima, Thiago!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software