Open In App

Check if the given slice is sorted in Golang

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

In Go language slice is more powerful, flexible, convenient than an array, and is a lightweight data structure. The slice is a variable-length sequence which stores elements of a similar type, you are not allowed to store different type of elements in the same slice.
In Go language, you can check the given slice is sorted or not with the help of SliceIsSorted() function. This function returns true if the given slice is sorted. Or return false if the given slice is not sorted. And this function will panic if the specified interface is not a slice type. It is defined under the sort package so, you have to import sort package in your program for accessing SliceIsSorted function.

Syntax:

func SliceIsSorted(a_slice interface{}, less func(p, q int) bool) bool

Example:




// Go program to illustrate how to check
// the given slice is sorted or not
package main
  
import (
    "fmt"
    "sort"
)
  
// Main function
func main() {
  
    // Creating and initializing
    // a structure
    Author := []struct {
        a_name    string
        a_article int
        a_id      int
    }{
        {"Mina", 304, 1098},
        {"Cina", 634, 102},
        {"Tina", 104, 105},
        {"Rina", 10, 108},
        {"Sina", 234, 103},
        {"Vina", 237, 106},
        {"Rohit", 56, 107},
        {"Mohit", 300, 104},
        {"Riya", 4, 101},
        {"Sohit", 20, 110},
    }
  
    // Sorting Author by their name
    // Using Slice() function
    sort.Slice(Author, func(p, q int) bool
     return Author[p].a_name < Author[q].a_name })
  
    // Checking the slice is sorted
    // according to their names
    // Using SliceIsSorted function
    res1 := sort.SliceIsSorted(Author, func(p, q int) bool
               return Author[p].a_name < Author[q].a_name })
      
    if res1 == true {
      
        fmt.Println("Slice is sorted by their names")
          
    } else {
      
        fmt.Println("Slice is not sorted by their names")
    }
  
    // Checking the slice is sorted 
    // according to their total articles
    // Using SliceIsSorted function
    res2 := sort.SliceIsSorted(Author, func(p, q int) bool
         return Author[p].a_article < Author[q].a_article })
      
    if res2 == true {
      
        fmt.Println("Slice is sorted by "+
         "their total number of articles")
          
    } else {
      
        fmt.Println("Slice is not sorted by"+
           " their total number of articles")
    }
  
    // Sorting Author by their ids
    // Using Slice() function
    sort.Slice(Author, func(p, q int) bool
      return Author[p].a_id < Author[q].a_id })
  
    // Checking the slice is sorted
    // according to their ids
    // Using SliceIsSorted function
    res3 := sort.SliceIsSorted(Author, func(p, q int) bool
                   return Author[p].a_id < Author[q].a_id })
      
    if res3 == true {
      
        fmt.Println("Slice is sorted by their ids")
          
    } else {
      
        fmt.Println("Slice is not sorted by their ids")
    }
}


Output:

Slice is sorted by their names
Slice is not sorted by their total number of articles
Slice is sorted by their ids


Last Updated : 28 Aug, 2019
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads