개발자

go 역정렬- sort.Sort(sort.Reverse(sort.IntSlice(a))) 빠른이유???

2023년 09월 20일조회 71

문득 알고리즘 풀다가 아래의 게시글을 보았습니다 https://jusths.tistory.com/217 역정렬 할때 게시글처럼 진행하면 속도가 빠르다고 하는데 왜 그럴까요? 리터럴 함수로 호출하는게 빠르다고 생각했었습니다만....

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

박범수님의 프로필 사진

블로그 게시자가 결론을 반대로 쓰셨습니다. BenchmarkSortReverse/sort_using_sort.Reverse-12 127 9259809 ns/op 40 B/op 2 allocs/op BenchmarkSortReverse/sort_using_sort.Slice-12 253 4755820 ns/op 56 B/op 2 allocs/op 이게 글에 나온 테스트 결과인데요. Reverse 쓴게 거의 두 배 느립니다. 제가 다시 해봐도 마찬가지였습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 09월 20일

Go 언어의 `sort.Sort(sort.Reverse(sort.IntSlice(a)))` 함수는 지정된 슬라이스를 역순으로 효율적으로 정렬하는데, 이는 내부 알고리즘에 어떤 최적화가 있기 때문입니다. `sort.Sort()`함수는 내부적으로 '퀵소트' 알고리즘을 구현합니다. 이 알고리즘은 평균적으로 O(n log n)의 시간 복잡도를 가지며 일반적인 경우에서 아주 빠른 성능을 보여줍니다. `sort.Reverse()` 함수는 sort.Interface를 구현한 타입을 받아들여 그 순서를 바꾼 새로운 Interface를 반환합니다. 이것이 가능한 이유는 Go의 인터페이스 시스템과 '구성 가능한 동작' 개념 때문입니다. 그리고 리터럴 함수(익명 함수)로 호출하는 것보다 Go가 제공하는 내장 sort와 reverse 메서드를 사용하면 추가적인 오버헤드 없이 직접 처리되므로 속도가 빠릅니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!