[go] Sort 패키지와 CountingSort 알고리즘
Go 언어는 자체적인 sort
패키지를 제공하여 다양한 데이터 타입에 대한 정렬을 지원합니다. 이번 포스트에서는 sort
패키지를 사용하여 정렬하는 방법과 CountingSort
알고리즘에 대해 알아보겠습니다.
Go의 sort 패키지
Go 언어의 sort
패키지는 다양한 데이터 타입에 대한 정렬을 제공합니다. 이 패키지는 내장 타입 (예: int
, float64
, string
) 및 사용자 정의 타입에 대한 정렬을 지원합니다. 아래는 간단한 예제 코드입니다.
package main
import (
"fmt"
"sort"
)
func main() {
// 정렬할 데이터
data := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
// 정렬
sort.Ints(data)
// 정렬 결과 출력
fmt.Println(data)
}
위의 예제 코드는 정수형 슬라이스를 정렬하는 예제입니다. sort
패키지의 Ints
함수를 사용하여 간단히 정렬할 수 있습니다. 이외에도 sort
패키지에는 다양한 정렬 함수들이 제공되므로 필요에 따라 활용할 수 있습니다.
CountingSort 알고리즘
CountingSort
는 비교 정렬이 아닌 정렬 알고리즘 중의 하나로, 원소의 순서에 상대적으로 둔감한 성질을 가지고 있습니다. 이 알고리즘은 입력 배열의 요소들이 정수이고, 각 요소의 값이 어떤 범위에 속할 때 가장 효과적으로 작동합니다.
아래는 CountingSort
알고리즘의 예제 코드입니다.
package main
import "fmt"
func countingSort(data []int, k int) []int {
count := make([]int, k+1)
sorted := make([]int, len(data))
for _, value := range data {
count[value]++
}
for i := 1; i <= k; i++ {
count[i] += count[i-1]
}
for j := len(data) - 1; j >= 0; j-- {
sorted[count[data[j]]-1] = data[j]
count[data[j]]--
}
return sorted
}
func main() {
data := []int{4, 2, 2, 8, 3, 3, 1}
k := 8
sortedData := countingSort(data, k)
fmt.Println(sortedData)
}
CountingSort
는 데이터의 값 범위를 이용하여 성능을 향상시킬 수 있는 알고리즘 중 하나입니다.
위에서 제공한 예제 코드들과 정보를 바탕으로, Go의 sort
패키지를 활용하는 방법과 CountingSort
알고리즘에 대해 살펴보았습니다.
참고 자료
- Go 언어 공식 문서: https://golang.org/pkg/sort/
- CountingSort 알고리즘: https://en.wikipedia.org/wiki/Counting_sort