go泛型实现排序
常用类型
int | int8 | int16 | int32 | int64 | float32 | float64 | string
实现
type SortType interface {
int | int8 | int16 | int32 | int64 | float32 | float64 | string
}
//冒泡排序
func bubbleSort[T SortType](array []T, reverse ...bool) {
for i := 0; i < len(array); i++ {
for j := 0; j < len(array)-i-1; j++ {
if reverse != nil && reverse[0] {
if array[j] < array[j+1] {
array[j], array[j+1] = array[j+1], array[j]
}
} else {
if array[j] > array[j+1] {
array[j], array[j+1] = array[j+1], array[j]
}
}
}
}
}
// quickSort 快速排序
func quickSort[T SortType](array []T, reverse ...bool) {
if len(array) <= 1 {
return
}
// 选择一个基准值
pivot := array[0]
// 定义两个切片
var left, right []T
// 循环遍历
for i := 1; i < len(array); i++ {
if reverse != nil && reverse[0] {
if array[i] > pivot {
left = append(left, array[i])
} else {
right = append(right, array[i])
}
} else {
if array[i] < pivot {
left = append(left, array[i])
} else {
right = append(right, array[i])
}
}
}
if reverse != nil && reverse[0] {
quickSort(left, true)
quickSort(right, true)
} else {
quickSort(left, false)
quickSort(right, false)
}
copy(array, append(append(left, pivot), right...))
}