go语言中预置了[]int
[]float64
[]String
三种数据类型的排序函数, 如果需要对其他数据类型进行排序, 需要自己实现sort interface
内置数据类型排序 []int 类型排序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 func main () { fmt.Println("------------ Int Slice ------------" ) is := []int {19 , 26 , 3 , 78 , 56 } fmt.Println("排序前的Int Slice" , is) fmt.Println("Int Slice是否已经按升序排序" , sort.IntsAreSorted(is)) sort.Ints(is) fmt.Println("排序后的Int Slice" , is) fmt.Println("Int Slice是否已经按升序排序" , sort.IntsAreSorted(is)) sort.Sort(sort.Reverse(sort.IntSlice(is))) fmt.Println("逆序排列(降序)后的Int Slice" , is) }
运行结果:
1 2 3 4 5 6 ------------ Int Slice ------------ 排序前的Int Slice [19 26 3 78 56] Int Slice是否已经按升序排序 false 排序后的Int Slice [3 19 26 56 78] Int Slice是否已经按升序排序 true 逆序排列(降序)后的Int Slice [78 56 26 19 3]
[]float64 类型排序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 func main () { fmt.Println("------------ Float64 Slice ------------" ) f64s := []float64 {98.5 , 53.2 , 78.5 , 12.78 } fmt.Println("排序前的Float64 Slice" , f64s) fmt.Println("Float64 Slice是否已经按升序排序" , sort.Float64sAreSorted(f64s)) sort.Float64s(f64s) fmt.Println("排序后的Float64 Slice" , f64s) fmt.Println("Float64 Slice是否已经按升序排序" , sort.Float64sAreSorted(f64s)) sort.Sort(sort.Reverse(sort.Float64Slice(f64s))) fmt.Println("逆序排列(降序)后的Float64 Slice" , f64s) }
运行结果:
1 2 3 4 5 6 ------------ Float64 Slice ------------ 排序前的Float64 Slice [98.5 53.2 78.5 12.78] Float64 Slice是否已经按升序排序 false 排序后的Float64 Slice [12.78 53.2 78.5 98.5] Float64 Slice是否已经按升序排序 true 逆序排列(降序)后的Float64 Slice [98.5 78.5 53.2 12.78]
[]string 类型排序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 func main () { fmt.Println("------------ String Slice ------------" ) ss := []string {"watermelon" , "apple" , "strawberry" , "orange" } fmt.Println("排序前的String Slice" , ss) fmt.Println("String Slice是否已经按升序排序" , sort.StringsAreSorted(ss)) sort.Strings(ss) fmt.Println("排序后的String Slice" , ss) fmt.Println("String Slice是否已经按升序排序" , sort.StringsAreSorted(ss)) sort.Sort(sort.Reverse(sort.StringSlice(ss))) fmt.Println("逆序排列(降序)后的String Slice" , ss) }
运行结果:
1 2 3 4 5 6 ------------ String Slice ------------ 排序前的String Slice [watermelon apple strawberry orange] String Slice是否已经按升序排序 false 排序后的String Slice [apple orange strawberry watermelon] String Slice是否已经按升序排序 true 逆序排列(降序)后的String Slice [watermelon strawberry orange apple]
其他数据类型排序 int8
int16
int32
int64
float32
虽然也是常用的数据类型, 但是这些数据类型需要自己实现排序接口
1 2 3 4 5 6 7 8 9 10 11 12 type Interface interface { Len() int Less(i, j int ) bool Swap(i, j int ) }
[]int32 类型排序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 type Int32Slice []int32 func (s Int32Slice) Len () int { return len (s) } func (s Int32Slice) Swap (i, j int ) { s[i], s[j] = s[j], s[i] } func (s Int32Slice) Less (i, j int ) bool { return s[i] < s[j] } func main () { i32s := Int32Slice{19 , 26 , 3 , 78 , 56 } sort.Sort(i32s) fmt.Println(i32s) }
运行结果:
[]float32 类型排序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 type Float32Slice []float32 func (s Float32Slice) Len () int { return len (s) } func (s Float32Slice) Swap (i, j int ) { s[i], s[j] = s[j], s[i] } func (s Float32Slice) Less (i, j int ) bool { return s[i] < s[j] } func main () { f32s := Float32Slice{98.5 , 53.2 , 78.5 , 12.78 } sort.Sort(f32s) fmt.Println(f32s) }
运行结果: