Skip to content

Commit 2d939e6

Browse files
committed
[post] selection-sort
1 parent b4706be commit 2d939e6

File tree

1 file changed

+60
-0
lines changed
  • content/blog/2020-05-14-selection-sort

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
title: Selection Sort
3+
date: "2020-05-14"
4+
description: "Selection sort é um dos muitos algoritmos de ordenação que exitem no mundo da computação, o Selection Sort tem a sua característica de ordenção baseada em iteração, selecção e troca."
5+
path: "/selection-sort"
6+
tags: ["JavaScript", "Intermediário"]
7+
author: "Faustino Kialungila"
8+
---
9+
10+
**Selection sort** é um dos muitos algoritmos de ordenação que existem no mundo da computação, este algoritmo tem a sua característica de ordenação baseada em **iteração**, **selecção** e **troca**.
11+
12+
Imaginem que temos uma lista com os dados de mais ou menos dois mil estudantes, na qual nos foi pedido a ordenação da mesma conforme a idade e por ordem crescente.
13+
14+
```javascript
15+
let students = [
16+
{ name: "Joseana", age: 30 },
17+
{ name: "Faustino", age: 24 },
18+
{ name: "Ana", age: 43 },
19+
{ name: "António", age: 28 },
20+
{ name: "Clara", age: 19 },
21+
// ... resto dos estudantes
22+
]
23+
```
24+
25+
Podemos ordernar esta lista usando o **selection sort** e seguindo os seguintes passos:
26+
27+
- Seleccionar o índice do primeiro estudante da lista e considerando-o como sendo o que tem a menor idade da lista, vamos chamá-lo de `pivot`.
28+
29+
- Percorrer a lista à procurar da primeira ocorrência de um estudante que tenha a idade menor do que a do `pivot`, assim que encontrarmos um, percorremos o resto da lista à procura do estudante que tenha a idade menor do que a do recém encontrado.
30+
31+
Assim que encontrarmos um estudante com a idade menor que do que a do estudante `pivot`, a posição dos mesmos é trocada, quer dizer, o estudante com a menor idade encontrada passa a ocupar a primeira posição da lista e o estudante `pivot` passa a ocupar a antiga posição do estudante com a menor idade.
32+
33+
Repetimos o mesmo processo até termos uma lista totalmente ordenada(por ordem crescente ou decrescente).
34+
35+
```javascript
36+
function selectionSort(list) {
37+
let pivotIdx = 0
38+
let listSize = list.length
39+
while (pivotIdx < listSize - 1) {
40+
let youngestIdx = pivotIdx
41+
for (let i = pivotIdx + 1; i < listSize; i++) {
42+
if (list[youngestIdx].age > list[i].age) {
43+
youngestIdx = i
44+
}
45+
}
46+
swapPlaces(list, pivotIdx, youngestIdx)
47+
pivotIdx++
48+
}
49+
return list
50+
}
51+
52+
function swapPlaces(list, pivotIdx, youngestIdx) {
53+
const [a, b] = [list[pivotIdx], list[youngestIdx]]
54+
list[youngestIdx] = a
55+
list[pivotIdx] = b
56+
}
57+
```
58+
59+
Note que este algoritmo pode ser usado em Arrays, Linked Lists, ou qualquer outro tipo de lista iterável.
60+
A complexidade de tempo deste algoritmo é de `O(n^2)` visto que percorremos a lista duas vezes.

0 commit comments

Comments
 (0)