簡介
如果你的程序中有需要排序的邏輯,強烈建議使用系統(tǒng)自帶的sort。因為系統(tǒng)自帶的sort中實現(xiàn)了3種基本的排序算法:插入排序、快排和堆排序。并且會根據(jù)實際數(shù)據(jù)自動選擇高效的排序算法。
基本數(shù)據(jù)類型排序
首先舉例說明:
func main() {
nums := []int{1, 9, 6, 8, 4}
fmt.Printf("nums : %v\n", nums) // nums : [1 9 6 8 4]
sort.Ints(nums)
fmt.Printf("nums : %v\n", nums) // nums : [1 4 6 8 9]
}
可以看到上面使用sort包對int數(shù)組進行了排序。sort包包含的主要方法有:
func Float64s(a []float64) //Float64s將類型為float64的slice a以升序方式進行排序
func Float64sAreSorted(a []float64) bool //判定是否已經(jīng)進行排序func Ints(a []int)
func Ints(a []int) //Ints 以升序排列 int 切片。
func IntsAreSorted(a []int) bool //IntsAreSorted 判斷 int 切片是否已經(jīng)按升序排列。
func IsSorted(data Interface) bool // IsSorted 判斷數(shù)據(jù)是否已經(jīng)排序。包括各種可sort的數(shù)據(jù)類型的判斷.
func Strings(a []string)//Strings 以升序排列 string 切片。
func StringsAreSorted(a []string) bool //StringsAreSorted 判斷 string 切片是否已經(jīng)按升序排列
測試一下對字符串?dāng)?shù)組的排序:
func main() {
strs := []string{"123", "jim", "北京", "000", "kate"}
fmt.Printf("strs : %v\n", strs) // strs : [123 jim 北京 000 kate]
sort.Strings(strs)
fmt.Printf("strs : %v\n", strs) // strs : [000 123 jim kate 北京]
}
對象排序
針對對象排序,需要實現(xiàn)Len、Swap、Less三個接口,然后即可使用sort.Sort方法進行排序。實例如下:
type Student struct {
Name string
Age int
Height float64
}
type StuSortByAge []Student
func (c StuSortByAge) Len() int {
return len(c)
}
func (c StuSortByAge) Swap(i, j int) {
c[i], c[j] = c[j], c[i]
}
func (c StuSortByAge) Less(i, j int) bool {
return c[i].Age < c[j].Age
}
func main() {
stu01 := Student{
Name:"Jim",
Age:9,
Height:1.21,
}
stu02 := Student{
Name:"Kate",
Age:6,
Height:1.12,
}
stu03 := Student{
Name:"Jack",
Age:8,
Height:1.22,
}
stu04 := Student{
Name:"Lisa",
Age:4,
Height:1.01,
}
var sts []Student
sts = append(sts, stu01, stu02, stu03, stu04)
fmt.Printf("Students : %v\n", sts) // Students : [{Jim 9 1.21} {Kate 6 1.12} {Jack 8 1.22} {Lisa 4 1.01}]
var ssba StuSortByAge
ssba = sts
fmt.Printf("Students : %v\n", ssba) // Students : [{Jim 9 1.21} {Kate 6 1.12} {Jack 8 1.22} {Lisa 4 1.01}]
sort.Sort(ssba)
fmt.Printf("Students : %v\n", ssba) // Students : [{Lisa 4 1.01} {Kate 6 1.12} {Jack 8 1.22} {Jim 9 1.21}]
}
上面是一個根據(jù)學(xué)生的年齡排序的實例,你也可以根據(jù)同樣的規(guī)則,去實現(xiàn)一個根據(jù)身高排序的方法。