jordan-bonecutter / sort

A faster implementation of Go's sort for slices

Repository from Github https://github.comjordan-bonecutter/sortRepository from Github https://github.comjordan-bonecutter/sort

Test Go Reference

sort

A faster implementation of Go's sort package for slices.

How

Go now has generics, but the sort implementation uses a lessSwap wrapper struct with the following form:

// lessSwap is a pair of Less and Swap function for use with the
// auto-generated func-optimized variant of sort.go in
// zfuncversion.go.
type lessSwap struct {
	Less func(i, j int) bool
	Swap func(i, j int)
}

Instead of directy operating on slices, swap (data[i], data[j] = data[j], data[i]) and less (data[i] < data[j]) are passed as function literals.

This means each swap, instead of being a quick array access, is a function call then a swap. A similar statement can be made regarding Less. We make this faster be implementing these operations directly on slices, saving us time in the pointer deref and the function call!

About

A faster implementation of Go's sort for slices

License:The Unlicense


Languages

Language:Go 100.0%