|
| 1 | +# Quick Sort (Ordenação rápida) |
| 2 | + |
| 3 | +#### Declaração do problema |
| 4 | + |
| 5 | +Dada uma matriz não classificada de n elementos, escreva uma função para classificar a matriz. |
| 6 | + |
| 7 | +#### Aproximação |
| 8 | + |
| 9 | +- Faça o pivô de valor de índice mais à direita |
| 10 | +- particionar a matriz usando o valor dinâmico |
| 11 | +- partição esquerda quicksort recursivamente |
| 12 | +- partição direita quicksort recursivamente |
| 13 | + |
| 14 | +#### Complexidade de tempo |
| 15 | + |
| 16 | +`O(n^2)` Desempenho de pior caso |
| 17 | + |
| 18 | +`O(n log n)` Desempenho de melhor caso |
| 19 | + |
| 20 | +`O(n log n)` Desempenho médio |
| 21 | +#### Complexidade do Espaço |
| 22 | + |
| 23 | +`O(log (n))` Pior caso |
| 24 | + |
| 25 | +#### Nome do fundador |
| 26 | + |
| 27 | +Tony Hoare em 1959. |
| 28 | + |
| 29 | +#### Exemplo |
| 30 | + |
| 31 | +``` |
| 32 | +arr[] = {10, 80, 30, 90, 40, 50, 70} |
| 33 | +Índices: 0 1 2 3 4 5 6 |
| 34 | +
|
| 35 | +baixo = 0, alto = 6, pivô = arr[h] = 70 |
| 36 | +Inicialize o índice do elemento menor, i = -1 |
| 37 | +
|
| 38 | +Atravesse elementos de j = baixo para alto-1 |
| 39 | +j = 0: como arr [j] <= pivô, faça i ++ e troque (arr[i], arr[j]) |
| 40 | +i = 0 |
| 41 | +arr [] = {10, 80, 30, 90, 40, 50, 70} // Sem alteração como i e j |
| 42 | + // são iguais |
| 43 | +
|
| 44 | +j = 1: como arr[j] > pivô, não faça nada |
| 45 | +// Sem alteração em i e arr[] |
| 46 | +
|
| 47 | +j = 2: Como arr [j] <= pivô, faça i ++ e troque (arr [i], arr [j]) |
| 48 | +i = 1 |
| 49 | +arr [] = {10, 30, 80, 90, 40, 50, 70} // Trocamos 80 e 30 |
| 50 | +
|
| 51 | +j = 3: Como arr[j] > pivô, não faça nada |
| 52 | +// Sem alteração em i e arr[] |
| 53 | +
|
| 54 | +j = 4: Como arr [j] <= pivô, faça i ++ e troque (arr[i], arr[j]) |
| 55 | +i = 2 |
| 56 | +arr[] = {10, 30, 40, 90, 80, 50, 70} // 80 e 40 trocados |
| 57 | +j = 5: Como arr[j] <= pivô, faça i ++ e troque arr[i] por arr[j] |
| 58 | +i = 3 |
| 59 | +arr[] = {10, 30, 40, 50, 80, 90, 70} // 90 e 50 trocados |
| 60 | +
|
| 61 | +Saímos do loop porque j agora é igual a high-1. |
| 62 | +Finalmente, colocamos o pivô na posição correta, trocando |
| 63 | +arr[i + 1] e arr[alto] (ou pivô) |
| 64 | +arr[] = {10, 30, 40, 50, 70, 90, 80} // 80 e 70 trocados |
| 65 | +
|
| 66 | +Agora, 70 está em seu lugar correto. Todos os elementos menores que |
| 67 | +70 estão antes dele e todos os elementos maiores que 70 estão depois |
| 68 | +isto. |
| 69 | +``` |
| 70 | + |
| 71 | +#### Links de implementação de código |
| 72 | + |
| 73 | +- [Java](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) |
| 74 | +- [C++](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/Sorting/Quick%20Sort.cpp) |
| 75 | +- [Python](https://github.com/TheAlgorithms/Python/blob/master/sorts/quick_sort.py) |
| 76 | +- [Ruby](https://github.com/TheAlgorithms/Ruby/blob/master/sorting/quicksort.rb) |
| 77 | + |
| 78 | +#### Explicação em vídeo |
| 79 | + |
| 80 | +[Um vídeo explicando o algoritmo de classificação rápida](https://www.youtube.com/watch?v=COk73cpQbFQ) |
0 commit comments