티스토리 뷰

반응형

Photo by Honey Fangs on Unsplash

 

아주 잡다한 테스트이다. 정수를 역정렬하는 방법은 크게 개가 떠오르는데 어느게 빠른지 알고 싶었다.

전체 테스트코드 링크: https://github.com/nicewook/golang-sort-reverse-test

 

번째 방법은 sort.Reverse() 활용하는 것이고, 번째 방법은 sort.Slice() 이용하는 것이다.

인상은 번째 방법이 빠를 같았다. 번째 방법은 뭔가 번이나 감싸잖아? 하는 선입견이 컸다.

 

func sortReverse1(a []int) {

  sort.Sort(sort.Reverse(sort.IntSlice(a)))

}

func sortReverse2(a []int) {

  sort.Slice(a, func(i, j int) bool {

    return a[i] > a[j]

  })

}


하지만
실제로 돌려보니 번째 방법이 빨랐다. 메모리를 사용하는 대신 속도가 빠르다.

벤치마크 코드

func BenchmarkSortReverse(b *testing.B) {
  a := make([]int, 100_000)
  for i := range a {
    a[i] = rand.Intn(100_000)
  }
  b.Run("sort using sort.Reverse", func(b *testing.B) {
    for n := 0; n < b.N; n++ {
      sortReverse1(a)
    }
  })
  b.Run("sort using sort.Slice", func(b *testing.B) {
    for n := 0; n < b.N; n++ {
      sortReverse2(a)
    }
  })
}

 

결과는 아래와 같다

$ go test -bench=. -benchmem
goos: windows
goarch: amd64
pkg: sortreverse
cpu: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
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

 

반응형
댓글
댓글쓰기 폼