Home | History | Annotate | Download | only in sort
      1 // Copyright 2011 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package sort_test
      6 
      7 import (
      8 	"fmt"
      9 	"math"
     10 	"sort"
     11 )
     12 
     13 func ExampleInts() {
     14 	s := []int{5, 2, 6, 3, 1, 4} // unsorted
     15 	sort.Ints(s)
     16 	fmt.Println(s)
     17 	// Output: [1 2 3 4 5 6]
     18 }
     19 
     20 func ExampleIntsAreSorted() {
     21 	s := []int{1, 2, 3, 4, 5, 6} // sorted ascending
     22 	fmt.Println(sort.IntsAreSorted(s))
     23 
     24 	s = []int{6, 5, 4, 3, 2, 1} // sorted descending
     25 	fmt.Println(sort.IntsAreSorted(s))
     26 
     27 	s = []int{3, 2, 4, 1, 5} // unsorted
     28 	fmt.Println(sort.IntsAreSorted(s))
     29 
     30 	// Output: true
     31 	// false
     32 	// false
     33 }
     34 
     35 func ExampleFloat64s() {
     36 	s := []float64{5.2, -1.3, 0.7, -3.8, 2.6} // unsorted
     37 	sort.Float64s(s)
     38 	fmt.Println(s)
     39 
     40 	s = []float64{math.Inf(1), math.NaN(), math.Inf(-1), 0.0} // unsorted
     41 	sort.Float64s(s)
     42 	fmt.Println(s)
     43 
     44 	// Output: [-3.8 -1.3 0.7 2.6 5.2]
     45 	// [NaN -Inf 0 +Inf]
     46 }
     47 
     48 func ExampleFloat64sAreSorted() {
     49 	s := []float64{0.7, 1.3, 2.6, 3.8, 5.2} // sorted ascending
     50 	fmt.Println(sort.Float64sAreSorted(s))
     51 
     52 	s = []float64{5.2, 3.8, 2.6, 1.3, 0.7} // sorted descending
     53 	fmt.Println(sort.Float64sAreSorted(s))
     54 
     55 	s = []float64{5.2, 1.3, 0.7, 3.8, 2.6} // unsorted
     56 	fmt.Println(sort.Float64sAreSorted(s))
     57 
     58 	// Output: true
     59 	// false
     60 	// false
     61 }
     62 
     63 func ExampleReverse() {
     64 	s := []int{5, 2, 6, 3, 1, 4} // unsorted
     65 	sort.Sort(sort.Reverse(sort.IntSlice(s)))
     66 	fmt.Println(s)
     67 	// Output: [6 5 4 3 2 1]
     68 }
     69 
     70 func ExampleSlice() {
     71 	people := []struct {
     72 		Name string
     73 		Age  int
     74 	}{
     75 		{"Gopher", 7},
     76 		{"Alice", 55},
     77 		{"Vera", 24},
     78 		{"Bob", 75},
     79 	}
     80 	sort.Slice(people, func(i, j int) bool { return people[i].Name < people[j].Name })
     81 	fmt.Println("By name:", people)
     82 
     83 	sort.Slice(people, func(i, j int) bool { return people[i].Age < people[j].Age })
     84 	fmt.Println("By age:", people)
     85 	// Output: By name: [{Alice 55} {Bob 75} {Gopher 7} {Vera 24}]
     86 	// By age: [{Gopher 7} {Vera 24} {Alice 55} {Bob 75}]
     87 }
     88 
     89 func ExampleSliceStable() {
     90 
     91 	people := []struct {
     92 		Name string
     93 		Age  int
     94 	}{
     95 		{"Alice", 25},
     96 		{"Elizabeth", 75},
     97 		{"Alice", 75},
     98 		{"Bob", 75},
     99 		{"Alice", 75},
    100 		{"Bob", 25},
    101 		{"Colin", 25},
    102 		{"Elizabeth", 25},
    103 	}
    104 
    105 	// Sort by name, preserving original order
    106 	sort.SliceStable(people, func(i, j int) bool { return people[i].Name < people[j].Name })
    107 	fmt.Println("By name:", people)
    108 
    109 	// Sort by age preserving name order
    110 	sort.SliceStable(people, func(i, j int) bool { return people[i].Age < people[j].Age })
    111 	fmt.Println("By age,name:", people)
    112 
    113 	// Output: By name: [{Alice 25} {Alice 75} {Alice 75} {Bob 75} {Bob 25} {Colin 25} {Elizabeth 75} {Elizabeth 25}]
    114 	// By age,name: [{Alice 25} {Bob 25} {Colin 25} {Elizabeth 25} {Alice 75} {Alice 75} {Bob 75} {Elizabeth 75}]
    115 }
    116 
    117 func ExampleStrings() {
    118 	s := []string{"Go", "Bravo", "Gopher", "Alpha", "Grin", "Delta"}
    119 	sort.Strings(s)
    120 	fmt.Println(s)
    121 	// Output: [Alpha Bravo Delta Go Gopher Grin]
    122 }
    123