최근 몇 년 동안 Go 언어는 특히 웹 개발 및 클라우드 네이티브 애플리케이션에서 매우 인기 있는 프로그래밍 언어가 되었습니다. 그 중 Go 언어의 정렬 기능은 매우 강력하며 다양한 정렬 기능을 쉽게 구현할 수 있습니다. 이번 글에서는 Go 언어에서 정렬을 구현하는 방법을 살펴보겠습니다.
1. Golang의 정렬
Go 언어는 다양한 정렬 알고리즘을 구현하기 위한 정렬 패키지를 제공합니다. 정렬 패키지의 두 가지 주요 기능을 소개하겠습니다.
sort.Slice 함수는 Slice 유형의 데이터를 정렬하는 데 사용할 수 있습니다. 해당 함수 프로토타입은 다음과 같습니다.
func Slice(slice interface{}, less func(i, j int) bool)
그 중 slice
매개변수는 조각을 나타냅니다. , less
매개변수는 판단 함수이며 반환 값은 bool 유형이어야 합니다. 판단 함수 less
는 슬라이스에 있는 각 요소의 크기 관계를 결정하는 데 사용됩니다. true가 반환되면 앞 요소가 뒤 요소보다 작으므로 교체해야 함을 의미합니다. slice
参数表示需要排序的切片,less
参数是一个判断函数,返回值必须是bool类型。判断函数less
用于判定切片中每个元素的大小关系,如果返回true代表前面的元素比后面的元素小,需要交换位置。
以排序int类型的切片为例,示例代码如下:
package main import ( "fmt" "sort" ) func main() { ints := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 4} sort.Slice(ints, func(i, j int) bool { return ints[i] < ints[j] }) fmt.Println(ints) }
上面的程序可以对一个int类型的切片进行排序,结果将按照从小到大的顺序排列。
sort.Sort函数可以用来排序实现了sort.Interface接口的类型,其函数原型如下:
func Sort(data Interface)
其中,data
type Interface interface { Len() int Less(i, j int) bool Swap(i, j int) }
sort.Sort
sort.Sort 함수는 sort.Interface 인터페이스를 구현하는 유형을 정렬하는 데 사용할 수 있습니다. 해당 함수 프로토타입은 다음과 같습니다.package main import ( "fmt" "sort" ) type stringSlice []string func (s stringSlice) Len() int { return len(s) } func (s stringSlice) Less(i, j int) bool { return s[i] < s[j] } func (s stringSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func main() { words := stringSlice{"foo", "bar", "baz", "qux"} sort.Sort(words) fmt.Println(words) }
data
매개변수가 있습니다. 정렬해야 하는 데이터를 나타냅니다. 이 매개변수는 sort.Interface 인터페이스를 구현하는 유형이어야 합니다. sort.Interface 인터페이스의 정의는 다음과 같습니다. package main import "fmt" func quickSort(arr []int, left, right int) { if left < right { partIndex := partition(arr, left, right) quickSort(arr, left, partIndex-1) quickSort(arr, partIndex+1, right) } } func partition(arr []int, left, right int) int { pivot := left for i:= left + 1; i <= right; i++ { if arr[i] < arr[left] { pivot++ arr[pivot], arr[i] = arr[i], arr[pivot] } } arr[left], arr[pivot] = arr[pivot], arr[left] return pivot } func main() { arr := []int{5, 0, 3, 2, 1, 6, 8, 9, 7, 4} quickSort(arr, 0, len(arr)-1) fmt.Println(arr) }
package main import "fmt" func shellSort(arr []int) []int { n := len(arr) for gap := n / 2; gap > 0; gap /= 2 { for i := gap; i < n; i++ { for j := i - gap; j >= 0 && arr[j] > arr[j+gap]; j -= gap { arr[j], arr[j+gap] = arr[j+gap], arr[j] } } } return arr } func main() { arr := []int{5, 0, 3, 2, 1, 6, 8, 9, 7, 4} fmt.Println(shellSort(arr)) }
기본 번호보다 작은 요소는 모두 기본 번호 앞에 배치하고 기본 번호보다 큰 요소는 기본 번호 뒤에 배치합니다.
참조 번호 앞과 뒤의 두 하위 시퀀스에 대해 위 단계를 반복합니다.
다음은 빠른 정렬을 위한 샘플 코드입니다.rrreee
🎜Hill 정렬🎜🎜🎜내림차순 증분 정렬 알고리즘이라고도 하는 Hill 정렬은 정렬할 요소를 결합하는 삽입 정렬을 보다 효율적으로 구현한 것입니다. 여러 그룹으로 나누어 각각 삽입 정렬을 수행하면 그룹 수를 점차 줄이고 그룹 내 요소의 간격을 늘려 최종 정렬이 완료됩니다. 🎜🎜다음은 Hill 정렬의 샘플 코드입니다. 🎜rrreee🎜 3. 요약 🎜🎜이 글에서는 Go 언어에서 정렬을 구현하는 방법과 일반적으로 사용되는 정렬 알고리즘을 소개합니다. Quick 정렬과 Hill 정렬은 가장 일반적으로 사용되는 정렬 중 하나입니다. 정렬 알고리즘은 비교적 효율적인 구현 방법입니다. 정렬 패키지를 사용할 때 개발자는 sort.Interface의 세 가지 메서드를 재정의해야 합니다. 좀 더 복잡한 데이터 구조의 경우 자체 정렬 알고리즘을 구현하여 정렬 작업을 완료할 수도 있습니다. 🎜위 내용은 Go 언어로 정렬을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!