How to sort a slice of Search in Golang?

Go language provides inbuilt support implementation of basic constants and run-time reflection to operate sort package. Golang has the ability for functions to run independently of each other. By the help of this function we can easily sort integer and string by importing “sort” package. These functions are defined under the sort package so, you need to import sort package in your program. The sort function can search any list of important Golang sort functions as follows:

Syntax:

func Search(n int, f func(int) bool) int

Return Value: This function returns the smallest index i in [0, n) at which f(i) is true, supposing that on the range [0, n), f(i) == true implies f(i+1) == true.

This function is used to only sorts a slice of Search. Below examples illustrate the use of the above method in Golang:

Example 1:



filter_none

edit
close

play_arrow

link
brightness_4
code

package main
  
import (
    "fmt"
    "sort"
)
  
func main() {
  
    // integer slice in unsort order
    intSlice := []int{10, 3, 6, 10, 15, 21, 38, 26, 25, 45}
    a := 15
    pos := sort.SearchInts(intSlice, a)
    fmt.Printf("Found %d at index %d in %v\n", a, pos, intSlice)
  
    // string slice in unsorted order
    strSlice := []string{"Pink", "Orange"
                         "Green", "Black"
                  "Purple", "Blue", "Red"}
      
    b := "Green"
    pos = sort.SearchStrings(strSlice, b)
    fmt.Printf("Found %s at index %d in %v\n",
                             b, pos, strSlice)
  
    // string slice in unsorted order
    fltSlice := []float64{612.15, 114.510,
               211.144, 396.242, 485.143}
      
    c := 211.144
    pos = sort.SearchFloat64s(fltSlice, c)
    fmt.Printf("Found %f at index %d in %v\n",
                            c, pos, fltSlice)
  
    // sorted slice in descending
    d := []int{45, 38, 26, 25, 21, 15, 10, 10, 6, 3}
    e := 38
    i := sort.Search(len(d), func(i int) bool { return d[i] <= e })
      
    if i < len(d) && d[i] == e {
        fmt.Printf("found %d at index %d in %v\n", e, i, d)
    } else {
        fmt.Printf("%d not found in %v\n", e, d)
    }
}

chevron_right


Output:

Found 15 at index 4 in [10 3 6 10 15 21 38 26 25 45]
Found Green at index 6 in [Pink Orange Green Black Purple Blue Red]
Found 211.144000 at index 2 in [612.15 114.51 211.144 396.242 485.143]
found 38 at index 1 in [45 38 26 25 21 15 10 10 6 3]

Example 2: Given example illustrates searching a list sorted in ascending order in different forms.

filter_none

edit
close

play_arrow

link
brightness_4
code

package main
  
import (
    "fmt"
    "sort"
)
  
func main() {
  
    // unsorted
    s := []int{19, 42, 24, 63, -20, 59}
    sort.Sort(sort.IntSlice(s))
  
    // sorted
    fmt.Println(s)
    fmt.Println("Length of Slice: ", sort.IntSlice.Len(s))
  
    fmt.Println("40 found in Slice at position: ",
        sort.IntSlice(s).Search(40))
  
    fmt.Println("-10 found in Slice at position: ",
        sort.IntSlice(s).Search(6))
    fmt.Println("-----------------------------------")
  
    t := []string{"Pink", "Orange", "Green",
        "Black", "Purple", "Blue", "Red"}
  
    sort.Sort(sort.StringSlice(t))
  
    fmt.Println(t)
    fmt.Println("Length of Slice: ", sort.StringSlice.Len(t))
  
    fmt.Println("Black found in Slice at position: ",
        sort.StringSlice(t).Search("Black"))
  
    fmt.Println("Orange found in Slice at position: ",
        sort.StringSlice(t).Search("Orange"))
  
    fmt.Println("-----------------------------------")
  
    // unsorted
    u := []float64{602.15, 194.10, 611.144, 396.42, 655.433}
    sort.Sort(sort.Float64Slice(u))
  
    // sorted
    fmt.Println(u)
    fmt.Println("Length of Slice: ", sort.Float64Slice.Len(u))
  
    fmt.Println("611.144 found in Slice at position: ",
        sort.Float64Slice(u).Search(611.144))
  
    fmt.Println("194.10 found in Slice at position: ",
        sort.Float64Slice(u).Search(194.10))
}

chevron_right


Output:

[-20 19 24 42 59 63]
Length of Slice:  6
40 found in Slice at position:  3
-10 found in Slice at position:  1
-----------------------------------
[Black Blue Green Orange Pink Purple Red]
Length of Slice:  7
Black found in Slice at position:  0
Orange found in Slice at position:  3
-----------------------------------
[194.1 396.42 602.15 611.144 655.433]
Length of Slice:  5
611.144 found in Slice at position:  3
194.10 found in Slice at position:  0



My Personal Notes arrow_drop_up


If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.