0Pricing
Go Academy · Урок

Сортировка срезов

Используйте sort.Slice и вспомогательные средства

«Сортировка срезов» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Почему важна сортировка

Сортировка задаёт элементам определённый порядок. Стандартный пакет Go sort эффективно выполняет эту задачу.

В Go редко приходится писать собственный алгоритм сортировки. Вместо этого вызывайте вспомогательные функции, работающие со срезами.

Импорт пакета sort

Чтобы использовать пакет, импортируйте его с помощью import "sort". Он входит в стандартную библиотеку, поэтому скачивать дополнительные зависимости не нужно.

package main

import (
	"fmt"
	"sort"
)

func main() {
	fmt.Println("sort imported")
	_ = sort.IntsAreSorted([]int{1, 2, 3})
}

Сортировка целых чисел

sort.Ints сортирует срез типа int по возрастанию непосредственно в нём. Исходный срез изменяется.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{5, 2, 8, 1, 9}
	sort.Ints(nums)
	fmt.Println(nums)
}

Сортировка строк

sort.Strings сортирует срез строк в лексикографическом порядке (алфавитном, по порядку байтов).

package main

import (
	"fmt"
	"sort"
)

func main() {
	words := []string{"banana", "apple", "cherry"}
	sort.Strings(words)
	fmt.Println(words)
}

Сортировка чисел с плавающей точкой

sort.Float64s сортирует срез значений типа float64 по возрастанию.

package main

import (
	"fmt"
	"sort"
)

func main() {
	values := []float64{3.2, 1.5, 2.8}
	sort.Float64s(values)
	fmt.Println(values)
}

sort.Slice

sort.Slice сортирует любой срез с помощью предоставленной Вами функции сравнения. Функция принимает два индекса i и j и возвращает true, если элемент i должен находиться перед элементом j.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{5, 2, 8, 1}
	sort.Slice(nums, func(i, j int) bool {
		return nums[i] < nums[j]
	})
	fmt.Println(nums)
}

Порядок по убыванию

Чтобы сортировать по убыванию, измените сравнение в функции сравнения: верните nums[i] > nums[j].

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{5, 2, 8, 1}
	sort.Slice(nums, func(i, j int) bool {
		return nums[i] > nums[j]
	})
	fmt.Println(nums)
}

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

sort.Slice особенно удобен для структур. Вы сами выбираете поле, определяющее порядок.

package main

import (
	"fmt"
	"sort"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	people := []Person{{"Bob", 30}, {"Alice", 25}}
	sort.Slice(people, func(i, j int) bool {
		return people[i].Age < people[j].Age
	})
	fmt.Println(people)
}

Проверка сортировки

Вспомогательные функции, такие как sort.IntsAreSorted и sort.SliceIsSorted, возвращают true, если срез уже отсортирован, не изменяя его.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{1, 2, 3}
	fmt.Println(sort.IntsAreSorted(nums))
}

Изменение на месте

Все эти функции сортируют непосредственно в исходном срезе. Они не возвращают новый срез. После вызова sort.Ints(s) сама переменная s переупорядочивается.

package main

import (
	"fmt"
	"sort"
)

func main() {
	s := []int{3, 1, 2}
	sort.Ints(s)
	fmt.Println("s is now:", s)
}

Выбор подходящей вспомогательной функции

Для простых срезов используйте типизированные вспомогательные функции (sort.Ints, sort.Strings, sort.Float64s). Выбирайте sort.Slice, когда нужно задать собственное правило или отсортировать структуры.

  • sort.Ints — целые числа по возрастанию
  • sort.Slice — любые данные, Ваше правило

Быстрая проверка

Что возвращает функция сравнения в sort.Slice?

Итоги

Вы научились сортировать с помощью пакета sort:

  • sort.Ints, sort.Strings, sort.Float64s для типизированных срезов
  • sort.Slice с функцией сравнения для собственных правил и структур
  • Вся сортировка выполняется непосредственно в исходном срезе

Часто задаваемые вопросы

Урок «Сортировка срезов» бесплатный?

Да — полный текст урока «Сортировка срезов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сортировка срезов»?

Используйте sort.Slice и вспомогательные средства Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Сортировка срезов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сортировка срезов
  2. Пользовательский порядок сортировки
  3. Поиск в отсортированных данных
  4. Стабильная сортировка
← Назад к Go Academy