sort排序

簡介

如果你的程序中有需要排序的邏輯,強烈建議使用系統(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ù)身高排序的方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 sort的工作原理 sort將文件的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值...
    Saxon_323e閱讀 1,488評論 0 2
  • 場景 線上廣告系統(tǒng)需要對廣告進行排序,這一塊其實蠻復(fù)雜的,涉及流量規(guī)劃,點擊反饋。不過為了快速上線,這些先不考慮,...
    董澤潤閱讀 1,051評論 0 0
  • Arrays.sort()根據(jù)入?yún)㈩愋瓦x擇以下排序算法 基本類型數(shù)組使用快速排序 對象數(shù)組使用歸并排序 原因 使用...
    大頭8086閱讀 5,878評論 1 0
  • 剛剛看過“杜拉拉追婚記”這部電影,感觸很深?,F(xiàn)實中的我們有多人真的知道自己究竟想要什么呢?現(xiàn)在才覺得古人說的“自知...
    榮兒菇娘閱讀 227評論 0 1
  • 春天是跑步的季節(jié)。周日,是橫店一年一度的馬拉松比賽,五點準(zhǔn)時起床,從容地收拾好裝備,看看今天陰沉的天氣,心里...
    笑笑0201閱讀 455評論 0 4

友情鏈接更多精彩內(nèi)容