Сортировка выбором (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
.