mirror of
https://github.com/emirpasic/gods
synced 2024-11-16 12:12:59 +00:00
30 lines
771 B
Go
30 lines
771 B
Go
// Copyright (c) 2015, Emir Pasic. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package utils
|
|
|
|
import "sort"
|
|
|
|
// Sort sorts values (in-place) with respect to the given comparator.
|
|
//
|
|
// Uses Go's sort (hybrid of quicksort for large and then insertion sort for smaller slices).
|
|
func Sort(values []interface{}, comparator Comparator) {
|
|
sort.Sort(sortable{values, comparator})
|
|
}
|
|
|
|
type sortable struct {
|
|
values []interface{}
|
|
comparator Comparator
|
|
}
|
|
|
|
func (s sortable) Len() int {
|
|
return len(s.values)
|
|
}
|
|
func (s sortable) Swap(i, j int) {
|
|
s.values[i], s.values[j] = s.values[j], s.values[i]
|
|
}
|
|
func (s sortable) Less(i, j int) bool {
|
|
return s.comparator(s.values[i], s.values[j]) < 0
|
|
}
|