import (
"fmt"
"sort"
+ "strings"
)
// This example demonstrates searching a list sorted in ascending order.
// found 6 at index 7 in [55 45 36 28 21 15 10 6 3 1]
}
+// This example demonstrates finding a string in a list sorted in ascending order.
+func ExampleFind() {
+ a := []string{"apple", "banana", "lemon", "mango", "pear", "strawberry"}
+
+ for _, x := range []string{"banana", "orange"} {
+ i, found := sort.Find(len(a), func(i int) int {
+ return strings.Compare(x, a[i])
+ })
+ if found {
+ fmt.Printf("found %s at index %d\n", x, i)
+ } else {
+ fmt.Printf("%s not found, would insert at %d\n", x, i)
+ }
+ }
+
+ // Output:
+ // found banana at index 1
+ // orange not found, would insert at 4
+}
+
// This example demonstrates searching for float64 in a list sorted in ascending order.
func ExampleSearchFloat64s() {
a := []float64{1.0, 2.0, 3.3, 4.6, 6.1, 7.2, 8.0}
"slices"
. "sort"
"strconv"
- stringspkg "strings"
+ "strings"
"testing"
)
var ints = [...]int{74, 59, 238, -784, 9845, 959, 905, 0, 0, 42, 7586, -5467984, 7586}
var float64s = [...]float64{74.3, 59.0, math.Inf(1), 238.2, -784.0, 2.3, math.NaN(), math.NaN(), math.Inf(-1), 9845.768, -959.7485, 905, 7.8, 7.8}
-var strings = [...]string{"", "Hello", "foo", "bar", "foo", "f00", "%*&^*&^&", "***"}
+var stringsData = [...]string{"", "Hello", "foo", "bar", "foo", "f00", "%*&^*&^&", "***"}
func TestSortIntSlice(t *testing.T) {
data := ints
}
func TestSortStringSlice(t *testing.T) {
- data := strings
+ data := stringsData
a := StringSlice(data[0:])
Sort(a)
if !IsSorted(a) {
- t.Errorf("sorted %v", strings)
+ t.Errorf("sorted %v", stringsData)
t.Errorf(" got %v", data)
}
}
}
func TestStrings(t *testing.T) {
- data := strings
+ data := stringsData
Strings(data[0:])
if !StringsAreSorted(data[0:]) {
- t.Errorf("sorted %v", strings)
+ t.Errorf("sorted %v", stringsData)
t.Errorf(" got %v", data)
}
}
func TestSlice(t *testing.T) {
- data := strings
+ data := stringsData
Slice(data[:], func(i, j int) bool {
return data[i] < data[j]
})
if !SliceIsSorted(data[:], func(i, j int) bool { return data[i] < data[j] }) {
- t.Errorf("sorted %v", strings)
+ t.Errorf("sorted %v", stringsData)
t.Errorf(" got %v", data)
}
}
func TestCountSortOps(t *testing.T) { countOps(t, Sort, "Sort ") }
func bench(b *testing.B, size int, algo func(Interface), name string) {
- if stringspkg.HasSuffix(testenv.Builder(), "-race") && size > 1e4 {
+ if strings.HasSuffix(testenv.Builder(), "-race") && size > 1e4 {
b.Skip("skipping slow benchmark on race builder")
}
b.StopTimer()