Merge sort: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Correção da ortografia da palavra subproblemas
Formatação, remoção de link quebrado, incluídas referências
Linha 26:
 
=== Complexidade ===
* Complexidade de tempo: <math>\Theta(n \log n)</math>.
* Complexidade de espaço: <math>\Theta(n)</math>.
 
Linha 53:
 
== Comparação com outros algoritmos de ordenação por comparação ==
Em comparação a outros algoritmos de divisão e conquista, como o Quick sort[[Quicksort]], o Merge apresenta a mesma complexidade. Já em comparação a algoritmos mais básicos de ordenação por comparação e troca ([[Bubble sort|bubble]], [[Insertion sort|insertion]] e [[selection sort]]), o Merge é mais rápido e eficiente quando é utilizado sobre uma grande quantidade de dados<ref>{{citar web|url=https://www.blogcyberini.com/2018/07/merge-sort.html|titulo=Merge Sort|data=1 de julho 2018|acessodata=6 de julho de 2018|publicado=Blog Cyberini|ultimo=Felipe|primeiro=Henrique}}</ref>. Para entradas pequenas os algoritmos de ordenação por comparação mais básicos são pró-eficientes.
 
Abaixo uma tabela para comparação:
Linha 66:
|-
|Merge sort
|<math>O(n*\log( n))</math>
|<math>O(n*\log( n))</math>
|<math>O(n*\log( n))</math>
|-
|Quick sort
|<math>O(n*\log( n))</math>
|<math>O(n*\log( n))</math>
|<math>O(n<sup>^2)</supmath>)
|-
|Bubble sort
|<math>O(n)</math>
|<math>O(n<sup>^2)</supmath>)
|<math>O(n<sup>^2)</supmath>)
|-
|Insertion sort
|<math>O(n)</math>
|<math>O(n<sup>^2)</supmath>)
|<math>O(n<sup>^2)</supmath>)
|-
|Selection sort
|<math>O(n<sup>^2)</supmath>)
|<math>O(n<sup>^2)</supmath>)
|<math>O(n<sup>^2)</supmath>)
|}
Obs.: O [[Bubble sort]] apresenta melhor caso como <math>O(n) </math>porque o algoritmo pode ser modificado de forma que, se a lista já estiver ordenada, basta apenas uma verificação básica que custa <math>O(n)</math><ref>{{citar web|url=https://www.blogcyberini.com/2018/02/bubble-sort.html|titulo=Bubble Sort|data=19 de fevereiro de 2018|acessodata=6 de julho de 2018|publicado=Blog Cyberini|ultimo=Felipe|primeiro=Henrique}}</ref>. O [[Quicksort|Quick sort]] pode atingir um tempo de <math>O(n<sup>2)</supmath>) em um caso específico quando o particionamento é desequilibrado.
 
== Observações ==
[[Imagem:Merge-sort-example-300px.gif|thumb|Exemplo de execução do merge sort.]]
 
* É possível implementar o ''merge sort'' utilizando somente um vetor auxiliar ao longo de toda a execução, tornando assim a complexidade de espaço adicional igual a <math>\Theta(n \log n)</math>.
* É um algoritmo estável na maioria das implementações, em que elas podem ser iterativas ou recursivas.
* É possível também implementar o algoritmo com espaço adicional <math>\Theta(1)</math>.
Linha 102:
=== Desvantagens ===
* Utiliza funções recursivas;
* Gasto extra de memória. O algoritmo cria uma cópia do vetor para cada nível da chamada recursiva, totalizando um uso adicional de memória igual a <math>O(n \log n)</math>.
 
=== Implementações do Mergesort ===
Linha 380:
k += 1
</syntaxhighlight>
 
{{Referências}}
* Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009) [1990]. Algoritmos (3rd ed.). MIT Press and McGraw-Hill. ISBN 978-85-352-36-6
 
== Ver também ==
Linha 394 ⟶ 391:
* [[Shell sort]]
* [[Radix sort]]
{{Referências}}
 
== Ligações externas ==
* {{Link|en|2=http://c2.com/cgi/wiki?MergeSort |3=Merge Sort}}
* [http://www.codecodex.com/wiki/Merge_sort Merge sort em 13 linguagens]
* {{Link||2=http://visualgo.net/sorting.html |3=}}
 
{{Portal3|Tecnologias de informação}}