1 Star 2 Fork 3

kristas/booting-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
sort.go 1.28 KB
一键复制 编辑 原始数据 按行查看 历史
kristas 提交于 2021-04-02 18:30 . feat: add filter function
package sort
type Comparable interface {
CompareTo(other Comparable) bool
}
func Sort(arr []Comparable) {
quickSort(arr, 0, len(arr)-1)
}
func quickSort(arr []Comparable, start, end int) {
if start < end {
i := partition(arr, start, end)
quickSort(arr, start, i-1)
quickSort(arr, i+1, end)
}
}
func partition(arr []Comparable, start, end int) int {
var key = arr[end]
var i = start
for j := start; j < end; j++ {
if arr[j].CompareTo(key) {
arr[j], arr[i] = arr[i], arr[j]
i++
}
}
arr[i], arr[end] = arr[end], arr[i]
return i
}
//type Comparator interface {
// Compare(o1 interface{}, o2 interface{}) bool
//}
type Comparator func(o1 interface{}, o2 interface{}) bool
func SortBy(arr []interface{}, comparator Comparator) {
quickSortBy(arr, 0, len(arr)-1, comparator)
}
func quickSortBy(arr []interface{}, start, end int, comparator Comparator) {
if start < end {
i := partitionBy(arr, start, end, comparator)
quickSortBy(arr, start, i-1, comparator)
quickSortBy(arr, i+1, end, comparator)
}
}
func partitionBy(arr []interface{}, start, end int, comparator Comparator) int {
var key = arr[end]
var i = start
for j := start; j < end; j++ {
if comparator(arr[j], key) {
arr[j], arr[i] = arr[i], arr[j]
i++
}
}
arr[i], arr[end] = arr[end], arr[i]
return i
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/kristas/booting-go.git
git@gitee.com:kristas/booting-go.git
kristas
booting-go
booting-go
v1.1.7

搜索帮助