Примеры фрагментов сортировки Golang

Primery Fragmentov Sortirovki Golang



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

Пример 1: Срез сортировки Golang в порядке возрастания

Функция sort.Slice() — это основная функция в Go, которая переставляет элементы среза в порядке возрастания или убывания. Обратите внимание на следующую иллюстрацию, где срез расположен в порядке возрастания:

упаковка основной
Импортировать (
'ФМТ'
'Сортировать'
)
функция основной () {
дажеSlice '=' [] инт { 10 , 2 , 8 , 4 , 0 , 6 }
ФМТ . Распечатать ( 'Несортированный фрагмент:' , дажеSlice )
Сортировать . Кусочек ( дажеSlice , функция ( я , Дж инт ) логический {
возвращаться дажеSlice [ я ] < четный срез [ Дж ]
})
ФМТ . Распечатать ( 'Отсортированный фрагмент:' , дажеSlice )
}

В начале функции main() мы определяем срез evenSlice со значениями {10, 2, 8, 4, 0, 6}. Этот срез представляет собой набор четных чисел, которые изначально не отсортированы. Для сортировки среза четного среза используется функция sort.Slice() со срезом. Внутри функции sort.Slice() в качестве аргумента предоставляется функция сортировки. Эта функция определяет порядок сортировки путем сравнения двух элементов среза с индексами «i» и «j». Если evenSlice[i] меньше, чем evenSlice[j], возвращается true; в противном случае возвращается ложь. Функция sort.Slice() использует эту функцию сравнения для перестановки элементов среза «evenSlice» в порядке возрастания.







Результаты отсортированного среза в порядке возрастания генерируются на следующем экране вывода:





Пример 2: Срез части сортировки Golang

Далее сортировка применяется к подсрезу указанного слайса в порядке возрастания с помощью функции sort.Slice() в Go.





упаковка основной
Импортировать (
'ФМТ'
'Сортировать'
)
функция основной () {
н '=' [] инт { 9 , 7 , 3 , 5 }
начинать '=' 0
конец '=' 3
Сортировать . Кусочек ( н [ начинать : конец ], функция ( я , Дж инт ) логический {
возвращаться н [ начинать + я ] < п [ начинать + Дж ]
})
ФМТ . Распечатать ( н )
}

Сначала мы создаем срез «n» со значениями [9, 7, 3, 5]. Кроме того, две переменные, «начало» и «конец», имеют значения 0 и 3 соответственно. Эти переменные определяют диапазон индексов в срезе «n», который будет отсортирован. Затем вызывается функция sort.Slice() с подсрезом «n[start:end]» в качестве первого аргумента. Этот подсрез содержит элементы «n» в указанном диапазоне. После этого функция сортировки передается в качестве второго аргумента внутри функции sort.Slice().

Здесь эта функция получает два индекса, «i» и «j», которые представляют элементы внутри подслоя. Чтобы сравнить элементы внутри подслоя, функция сортировки обращается к соответствующим элементам в исходном фрагменте, используя начало смещение. Он сравнивает n[start+i] и n[start+j].Затем функция sort.Slice() использует предоставленную функцию сортировки для перестановки элементов внутри подфрагмента в порядке возрастания.



Следующий вывод показывает, что элементы в указанном диапазоне (от начала до конца-1) отсортированы, а элементы за пределами диапазона остаются неизменными:

Пример 3. Сортировка целочисленного среза Golang с использованием функции Sort.Ints()

Более того, удобнее всего сортировать срезы целых чисел с помощью функции sort.Ints() без необходимости реализации пользовательских методов сортировки. Он действует непосредственно на целочисленные срезы и выполняет сортировку на месте. Следующая программа сортирует указанные целые числа:

упаковка основной
Импортировать (
'ФМТ'
'Сортировать'
)
функция основной () {
IntSlice '=' [] инт { 10 , 13 , пятнадцать , одиннадцать , 14 , 12 }
ФМТ . Распечатать ( 'Несортированный фрагмент:' , IntSlice )
Сортировать . Интс ( IntSlice )
ФМТ . Распечатать ( 'Отсортированный фрагмент:' , IntSlice )
}

Во-первых, мы объявляем и инициализируем срез «IntSlice» со значениями [10, 13, 15, 11, 14, 12], которые представляют набор целых чисел, которые изначально не отсортированы. Затем вызывается функция sort.Ints() со срезом «IntSlice» в качестве аргумента для сортировки «IntSlice». Функция sort.Ints() в этом случае внутренне сортирует каждую часть среза в соответствии с оптимизированным алгоритмом сортировки. Он изменяет исходный фрагмент напрямую, переставляя его элементы в отсортированном порядке.

Следующий вывод показывает, что сначала отображается несортированный срез, а затем отсортированный срез:

Пример 4: Срез строки сортировки Golang

Go также предлагает функцию sort.Strings() пакета sort, которая используется для сортировки части строк в определенном порядке. Здесь следующая программа помогает отсортировать срез строк:

упаковка основной
Импортировать (
'ФМТ'
'Сортировать'
)
функция основной () {
strSl '=' [] нить { 'голан' , 'питон' , 'Джава' , 'перл' , 'машинопись' }
Сортировать . Струны ( strSl )
ФМТ . Распечатать ( strSl )
}

Сначала мы установили срез «strSl» со ​​значениями [«golang», «python», «java», «perl», «typescript»], которые не отсортированы. После этого мы сортируем слайс «strSl» с помощью функции sort.Strings(), которая сортирует элементы слайса в лексикографическом порядке. Эта функция изменяет исходный фрагмент напрямую, переставляя его элементы в порядке сортировки на основе их значений ASCII.

Вывод сортирует срез строки по возрастанию, как показано ниже:

Пример 5: Срез проверки сортировки Golang с использованием функции IntAreSort()

Однако с помощью функции sort.IntsAreSorted() в Go мы можем проверить, отсортирован ли данный фрагмент целых чисел в порядке возрастания или нет. Рассмотрим следующий пример программы функции IntAreSort() для данного среза:

упаковка основной
Импортировать (
'ФМТ'
'Сортировать'
)
функция основной () {
сл '=' [] инт { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
ФМТ . Распечатать ( 'Срезы:' )
ФМТ . Распечатать ( 'Несортированный фрагмент:' , сл )
результат '=' Сортировать . IntsAreSorted ( сл )
ФМТ . Распечатать ( ' \n Результат:' )
ФМТ . Распечатать ( 'Данный фрагмент отсортирован?:' , результат )
}

Во-первых, несортированный срез случайных целых чисел определяется как «sl». Этот срез содержит набор целых чисел в произвольном порядке. Затем мы вызываем функцию sort.IntsAreSorted() и передаем слайс «sl» в качестве аргумента. Эта функция выдает логический результат, указывающий, расположены ли входные данные среза в порядке возрастания. Затем функция fmt.Println() печатает результаты, которые выводят, отсортирован ли данный срез или нет, на основе возвращенного логического значения.

Вывод отображает false для порядка сортировки среза целых чисел, поскольку он не отсортирован:

Пример 6: Срез обратной сортировки Golang

Кроме того, используя функции sortReverse() и sortStringSlice() из пакета sort в Go, мы можем выполнить обратную сортировку фрагмента строк. Следующая программа демонстрирует работу функции sort.Reverse():

упаковка основной
Импортировать (
'ФМТ'
'Сортировать'
)
функция основной () {
гласныйкусок '=' [] нить { 'Это' , 'а' , 'я' , 'в' , 'О' }
ФМТ . Распечатать ( 'Перед сортировкой:' , гласныйкусок )
Сортировать . Сортировать ( Сортировать . Обеспечить регресс ( Сортировать . StringSlice ( гласныйкусок )))
ФМТ . Распечатать ( 'После сортировки:' , гласныйкусок )
}

Начнем с определения фрагмента строки «vowelSlice», который содержит гласные «e», «a», «i», «u» и «o». Исходное содержимое указанного фрагмента строк печатается первым с помощью функции «печать». Далее выполняется операция сортировки с помощью функции sort.Sort() с функциями sort.Reverse() и sort.StringSlice() в качестве аргументов. Здесь «sort.Reverse()» создает новый тип, который меняет порядок элементов на противоположный. В качестве аргумента он принимает тип sort.StringSlice, который преобразует vowelSlice в сортируемый тип.

Вывод здесь отображает гласные в обратном алфавитном порядке:

Заключение

Мы рассмотрели различные функции сортировки с примерами, которые сортируют предоставленный фрагмент. Мы также рассказали о сортировке вложенных фрагментов и проверке того, отсортирован ли уже фрагмент. Следовательно, мы можем использовать возможности пакета sort для решения широкого круга задач сортировки в их проектах Go.