Golang內置排序算法


  Golang官方包中包含一個sort,提供了幾種排序算法。

  比如sort.Ints、Float64、Strings,分別是對整數,浮點數,字符串的排序。

  

        //數字排序
	ages := []int{2,1,5,66,55,23,78,98,13}
	sort.Ints(ages)
	for _, value := range ages {
		fmt.Println(value)
	}

	//字符串排序
	names := []string{"Hello", "World", "private", "folders", "Users", "workspace"}
	sort.Strings(names)
	for _, value := range names {
		fmt.Println(value)
	}

  除了上面幾種基礎的數值排序之外,golang還包含了針對復雜對象的排序。

  

type SortSample struct {

}

func (this *SortSample) Sort() {
	var planets = []Person{
		{"Jim", 11},
		{"Jack", 23},
		{"Meimei", 43},
		{"Justin", 32},
	}
        //依據名稱對人群排序
	name := func(p1, p2 *Person) bool {
		return p1.name < p2.name
	}
//依據年齡對人群排序 age := func(p1, p2 *Person) bool { return p1.age < p2.age } By(name).Sort(planets) fmt.Println("By name:", planets) By(age).Sort(planets) fmt.Println("By mass:", planets) } type earthMass float64 type au float64 type Person struct { name string age int } type By func(p1, p2 *Person) bool func (by By) Sort(planets []Person) { ps := &PersonSorter{ persons: planets, by: by, } sort.Sort(ps) } type PersonSorter struct { persons []Person by func(p1, p2 *Person) bool } func (s *PersonSorter) Len() int { return len(s.persons) } func (s *PersonSorter) Swap(i, j int) { s.persons[i], s.persons[j] = s.persons[j], s.persons[i] } func (s *PersonSorter) Less(i, j int) bool { return s.by(&s.persons[i], &s.persons[j]) }

  如果要對復雜對象排序的話,該排序必須包含Len,Swap,Less這三個方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM