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这三个方法。

posted @ 2017-02-21 16:34  walkabc  阅读(10926)  评论(0编辑  收藏  举报