go语言做题常用排序方法
1. 手撸快排,最直接的方法,也是最慢的
func quicksort(nums []int,start int,end int){
if start >= end {
return
}
root := nums[end]
l := start
r := end
for l < r {
for nums[l] <= root && l < r {
l++
}
nums[r] = nums[l]
for nums[r] >= root && l < r {
r--
}
nums[l] = nums[r]
}
nums[l] = root
quicksort(nums ,start,l - 1)
quicksort(nums ,l + 1,end)
}
2.排序函数
-
最简单版本,适用于一维切片
var num []int var strs []string sort.Ints(num) sort.Strings(string)
-
可改造版本,适用于二维切片或者不符合平常数值比较的切片
sort.Slice(nums,func(i int,j int)bool{ if nums[i][0] < nums[j][0] { return true } return false })// func函数 比较两个内部切片元素,下标分别为i,j,如果符合比较条件(自定义)返回true
-
简单版本的降序方法
sort.Sort(sort.Reverse(sort.IntSlice(nums)))