Язык Go. Сортировка выбором


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

Сразу к сути сортировки:

  1. Для каждой итерации внешнего цикла (for i...), внутренний цикл (for j...) проходит по неотсортированной части фрагмента nums, начиная с текущего индекса i и заканчивая концом среза.
  2. Переменная j служит индексом текущей итерации во внутреннем цикле, где мы проверяем, меньше ли значение по индексу nums[j], чем значение по текущему минимальному индексу nums[minIndex].
  3. Если nums[j] меньше, то мы обновляем minIndex до значения j, отмечая новое минимальное значение.
  4. По завершению внутреннего цикла внешний цикл меняет значение по текущему индексу i на значение по минимальному индексу nums[minIndex], помещая минимальное значение в отсортированную часть фрагмента nums в позицию i.

Запись опубликована в рубрике Go. Добавьте в закладки постоянную ссылку.

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.