★sort | sort 包為切片及用戶定義的集合的排序操作提供了原語.
- Interface接口
sort包有一個接口荚藻,實現(xiàn)了這個接口就被認為是可排序的昂利,就可以使用sort包的函數(shù)了:
type Interface interface {
// 長度
Len() int
// 是否 i < j乾翔,升序排序
Less(i, j int) bool
// 交換i,j兩個元素
Swap(i, j int)
}
PS:接受者是slice的話不需要用指針
- Sort函數(shù)
對于實現(xiàn)了Interface接口的變量來說可以使用快排贤重,時間復(fù)雜度O(n*log(n)):
func Sort(data Interface)
不過快排是不穩(wěn)定的,可能會被打亂順序冗茸,可以用歸并排序崖飘,時間復(fù)雜度O(n*log(n)):
func Stable(data Interface)
保證排序的穩(wěn)定性榴捡,相等元素的相對次序不變。
sort包實現(xiàn)了常見類型數(shù)組(int朱浴、float64吊圾、string)和切片(slice)的排序方法
- Search函數(shù)
二分查找函數(shù),不過函數(shù)只提供了二分查找的方法翰蠢,定義如下:
func Search(n int, f func(int) bool) int
- n是數(shù)組長度
- f是查找函數(shù)项乒,int指的是當(dāng)前查找下標(biāo),當(dāng)大于等于目標(biāo)元素返回true
- 返回查找到的下標(biāo)
PS:針對int躏筏、float64板丽、string定義了三個二分查找方法呈枉,但這三個方法內(nèi)并未檢測數(shù)組是否有序趁尼,無序也不會報錯但會返回錯誤結(jié)果。
- 判斷函數(shù)
用以判斷是否有序猖辫,函數(shù)名格式為 "Slice|Ints,Float64s,Strings" + "Is|Are" + "Sorted"酥泞,返回bool