Сортировка выбором (Selection sort) — простой алгоритм сортировки, который многократно выбирает минимальный элемент из неотсортированной части списка и меняет его местами с первым неотсортированным элементом.
Пример кода на Го:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
r := bufio.NewReader(os.Stdin)
strInput, _ := r.ReadString('\n')
strInput = strings.TrimSpace(strInput)
strSlice := strings.Split(strInput, " ")
var nums []int
for _, v := range strSlice {
num, _ := strconv.Atoi(v)
nums = append(nums, num)
}
// Selection Sort
// 1) go through slice and find lowest value
// 2) put lowest value at the beginning of slice by swapping with current one
for i := 0; i < len(nums); i++ {
minIndex := i
for j := i; j < len(nums); j++ {
if nums[j] < nums[minIndex] {
minIndex = j
}
}
nums[i], nums[minIndex] = nums[minIndex], nums[i]
}
fmt.Println(nums)
}
Сразу к сути сортировки:
- Для каждой итерации внешнего цикла (
for i...), внутренний цикл (for j...) проходит по неотсортированной части фрагментаnums, начиная с текущего индексаiи заканчивая концом среза. - Переменная
jслужит индексом текущей итерации во внутреннем цикле, где мы проверяем, меньше ли значение по индексуnums[j], чем значение по текущему минимальному индексуnums[minIndex]. - Если
nums[j]меньше, то мы обновляемminIndexдо значенияj, отмечая новое минимальное значение. - По завершению внутреннего цикла внешний цикл меняет значение по текущему индексу
iна значение по минимальному индексуnums[minIndex], помещая минимальное значение в отсортированную часть фрагмента nums в позициюi.
