Selection Sort
Sumário
Continuando meus estudos de algoritmos, agora consigo explicar o algoritmo selection sort (ordenação por seleção).
O selection sort é um algoritmo simples. Ele funciona encontrando o menor elemento de um array, adicionando esse elemento a um novo array e removendo-o do array original. Esse processo se repete até o array original ficar vazio. Quando isso acontece, o novo array contém os elementos em ordem.
Neste exemplo, não estou focando em performance, e sim na simplicidade do algoritmo.
Este é o array que vamos usar no exemplo:
arr := []int{100, 5, 3, 6, 2, 10}
No próximo passo, crio a função que recebe esse array e retorna o array ordenado:
func orderIntArray(arr []int) []int {
var result []int
var min int
for len(arr) > 0 {
min = getSmallerItem(arr)
result = append(result, arr[min])
arr = remove(arr, min)
}
return result
}
A função getSmallerItem é responsável por obter o índice do menor elemento do array:
func getSmallerItem(arr []int) int {
var min int = arr[0]
var pos int
for i := 1; i < len(arr); i++ {
if arr[i] < min {
min = arr[i]
pos = i
}
}
return pos
}
A função getSmallerItem compara cada elemento do array com a variável min.
Se o elemento for menor que min, a variável min é atualizada com o
valor do elemento, e a variável pos é atualizada com o índice dele.
Quando o loop termina, a variável pos é retornada.
A função remove é responsável por remover o elemento do array:
func remove(s []int, i int) []int {
s[i] = s[len(s)-1]
return s[:len(s)-1]
}
A função remove recebe o array e o índice do elemento que será removido.
Agora podemos testar a função:
func main() {
arr := []int{100, 5, 3, 6, 2, 10}
result := orderIntArray(arr)
fmt.Println(result) // return is [2 3 5 6 10 100]
}
Este algoritmo não é eficiente, mas é um bom exemplo para entender o selection sort.
Espero que você tenha gostado deste post, até o próximo!