# Writing Bubble Sort in Go from Scratch

## Bubble sort is named for the way elements “bubble up” to the top of the list.

The post Writing Bubble Sort in Go from Scratch first appeared on Qvault.

Bubble sort is named for the way elements “bubble up” to the top of the list. Bubble sort repeatedly steps through a slice and compares adjacent elements, swapping them if they are out of order. It continues to loop over the slice until the whole list is completely sorted.

`func bubbleSort(input []int) []int {    swapped := true    for swapped {        swapped = false        for i := 1; i < len(input); i++ {            if input[i-1] > input[i] {                input[i], input[i-1] = input[i-1], input[i]                swapped = true            }        }    }    return input}`
`func main() {    unsorted := []int{10, 6, 2, 1, 5, 8, 3, 4, 7, 9}    sorted := bubbleSort(unsortedInput)    // sorted = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}`

Bubble sort is famous for how easy it is to write. It’s one of the slowest sorting algorithms, but can be useful for a quick script or when the amount of data to be sorted is guaranteed to be small. If you need a sorting algorithm to use in a production system, I recommend not reinventing the wheel and using the built-in sort.Sort method.

While bubble sort is considered fast and easy to write, its actually one of the slowest sorting algorithms out there. Because bubble sort needs to move through the entire list for each element in the list, which in code is a nested for-loop, bubble sort has a complexity of `O(n^2)`.

Follow and hit me up on Twitter @q_vault if you have any questions or comments. If I’ve made a mistake in the article be sure to let me know so I can get it corrected!

Subscribe to my newsletter for more coding articles delivered straight to your inbox.

I love Go and Rust, and I like JavaScript and Python. I’m indiehacking on http://qvault.io when my daughter isn’t crying.

We publish several new computer science and coding articles every week. Our articles cover many different programming topics including but certainly not limited to Golang, JavaScript, Vue.js, algorithms, and cryptography. Subscribe for free updates in your inbox.