DEV Community

Divyanshu Shekhar
Divyanshu Shekhar

Posted on

How to Sort in Go?

Sorting is a concept that you encounter wherever you go, especially in the world of computer science. It holds immense importance, and it’s crucial to have a good understanding of it. In this blog, we will embark on a journey to learn how to sort in Go. But wait, it’s not just about sorting Golang integers, floats, or strings; we’ll also explore sorting custom data types and even dive into complex data structures. By the time you finish reading this blog, we assure you that you’ll have a strong grasp of the concept.

Now, you might be wondering if we’re going to build sorting algorithms from scratch. Well, fear not! We will be leveraging the power of Go’s built-in sort package. So, without further ado, let’s take a deep dive into the vast pool of knowledge that awaits us.

Golang Sort Package

The sort package in Go is a powerful built-in package that provides a collection of methods and interfaces for sorting different types of data. It was developed to simplify the process of sorting elements in a Go program and to offer efficient sorting algorithms out of the box.

The sort package was included in Go starting from version 1.0, making it readily available for developers to use in their projects. To begin using the sort package, you need to import it into your Go program. Here’s how you can do that:

import "sort"
Enter fullscreen mode Exit fullscreen mode

By including this import statement at the beginning of your Go code, you gain access to the various sorting functions and methods provided by the sort package.

The sort package is designed to handle sorting operations on slices, which are dynamic arrays in Go. By leveraging the functions and methods from this package, you can easily sort slices of integers, floats, strings, or even custom data types according to your specific requirements.

Go Sort Ints

Go sort’s Ints function is designed to sort a slice of integers in increasing order. It takes a slice of int values as input and modifies the slice in place to reflect the sorted order.

Let’s take a look at the syntax and an example to understand it better.

Syntax:

func Ints(x []int)
Enter fullscreen mode Exit fullscreen mode

Example:

func main() {
    // Unsorted Array
    s := []int{5, 8, 3, 2, 7, 1}
    sort.Ints(s)
    fmt.Println(s)
}
Enter fullscreen mode Exit fullscreen mode

Output:

[1 2 3 5 7 8]
Enter fullscreen mode Exit fullscreen mode

In the example above, we have an unsorted slice of integers s. We call the sort.Ints function, passing the slice s as an argument. After the function call, the s slice is sorted in increasing order.

Check if Int Slice/Array is Sorted

If you want to check whether a slice of int values is already sorted in increasing order, you can use the IntsAreSorted function. Let’s explore its syntax and an example.

Syntax:

func IntsAreSorted(x []int) bool
Enter fullscreen mode Exit fullscreen mode

Example:

func main() {
    // Sorted in Ascending order
    s := []int{1, 2, 3, 4, 5}
    fmt.Println(sort.IntsAreSorted(s))

    // Sorted in Descending order
    s = []int{5, 4, 3, 2, 1}
    fmt.Println(sort.IntsAreSorted(s))

    // Unsorted order
    s = []int{4, 2, 3, 1, 5}
    fmt.Println(sort.IntsAreSorted(s))
}
Enter fullscreen mode Exit fullscreen mode

Output:

true
false
false
Enter fullscreen mode Exit fullscreen mode

In the example above, we have three different scenarios. The first slice s is already sorted in ascending order, so the output is true. The second slice s is sorted in descending order, resulting in an output of false. The third slice s is completely unsorted, leading to another output of false.

Search in Ints Array/Slice

Now let’s explore how to search for an integer value in a sorted slice using the SearchInts function. This function returns the index at which the value is found or the index where it should be inserted to maintain the sorted order.

Syntax:

func SearchInts(a []int, x int) int
Enter fullscreen mode Exit fullscreen mode

Example:

func main() {
    a := []int{1, 2, 3, 4, 5}

    x := 3
    i := sort.SearchInts(a, x)
    fmt.Printf("%d found at index %d in %v\n", x, i, a)

    x = 6
    i = sort.SearchInts(a, x)
    fmt.Printf("%d not found, can be inserted at index %d in %v\n", x, i, a)
}
Enter fullscreen mode Exit fullscreen mode

Output:

3 found at index 2 in [1 2 3 4 5]
6 not found, can be inserted at index 5 in [1 2 3 4 5]
Enter fullscreen mode Exit fullscreen mode

In this example, we have a sorted slice a containing integers. We use sort.SearchInts to search for the value x within the slice. If the value is found, the function returns the index of its occurrence. If the value is not found, the function returns the index where it should be inserted to maintain the sorted order.

In the first scenario, we search for x = 3 in the a slice and the function returns the index 2 since 3 is found at that position. In the second scenario, we search for x = 6, which is not present in the slice. The function returns 5, indicating that 6 can be inserted at the index 5 while preserving the sorted order of the slice.

Read the original blog from Here: How to Sort in Go?

Top comments (1)

Collapse
 
davidkroell profile image
David Kröll

Keep in mind, that the sort.Ints() can only sort int data types, not int32, uint etc. for this, a new package is introduced in go1.21 called slices.