8000 Merge pull request #83 from vbrazo/add-quick-sort · bloomsky9/Algorithms-Explanation@37888a6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 37888a6

Browse files
authored
Merge pull request TheAlgorithms#83 from vbrazo/add-quick-sort
Add Quick Sort pt-br
2 parents d1b0638 + 849d5ef commit 37888a6

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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

Comments
 (0)
0