[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 알고리즘에 대해 살펴보았습니다.

참고 자료