[go] Sort 패키지의 정렬 안정성

Go 언어의 sort 패키지는 여러 종류의 값을 정렬하는 기능을 제공합니다. 하지만 사용자들이 종종 sort 패키지의 정렬 작업이 안정적인지에 대한 질문을 받습니다. 이 텍스트에서는 Go 언어의 sort 패키지의 정렬 안정성에 대해 설명하고 예제를 통해 확인해보겠습니다.

안정성이란?

안정 정렬은 동일한 값에 대해 정렬을 수행했을 때, 기존의 순서가 유지되는 것을 의미합니다. 다시 말해, 동일한 값을 갖는 요소들이 정렬 이전과 정렬 이후에도 동일한 상대적 위치를 유지하는 것입니다.

Go에서의 정렬 안정성

Go 언어의 sort 패키지는 안정한 정렬을 제공합니다. 이는 Go 표준 라이브러리의 일관성과 안정성을 우선시하는 철학과 일치합니다.

예를 들어, 다음과 같이 구조체를 정의하고 이를 요소로 갖는 슬라이스를 정렬할 때, 안정한 정렬을 확인할 수 있습니다.

type Person struct {
    Age  int
    Name string
}

people := []Person{
    {Age: 25, Name: "Alice"},
    {Age: 30, Name: "Bob"},
    {Age: 25, Name: "Charlie"},
}

fmt.Println(people)  // [{25 Alice} {30 Bob} {25 Charlie}]

sort.SliceStable(people, func(i, j int) bool {
    return people[i].Age < people[j].Age
})

fmt.Println(people)  // [{25 Alice} {25 Charlie} {30 Bob}]

위의 예제에서 Age를 기준으로 정렬을 수행하고 있습니다. 이때 sort.SliceStable 함수를 사용하여 안정한 정렬을 확인할 수 있습니다. 결과를 통해 동일한 Age를 갖는 요소들이 정렬 이전과 정렬 이후에도 동일한 상대적 위치를 유지하는 것을 확인할 수 있습니다.

결론

Go 언어의 sort 패키지는 안정한 정렬을 제공합니다. 이를 통해 동일한 값에 대한 상대적 순서가 유지되고, 사용자들은 안정성에 대해 걱정할 필요가 없습니다.

위의 예제를 통해 안정한 정렬의 동작을 확인할 수 있으며, 안정한 정렬이 필요한 경우 sort 패키지를 안전하게 활용할 수 있습니다.

참고문헌: