Golang program for implementation of Radix Sort
Radix Sort is a clever and intuitive little sorting algorithm. Radix Sort puts the elements in order by comparing the digits of the numbers. Radix sort is an integer sorting algorithm that sorts data with integer keys by grouping the keys by individual digits that share the same significant position and value (place value). Radix sort uses counting sort as a subroutine to sort an array of numbers.
Example
package main
import (
"bytes"
"encoding/binary"
"fmt"
)
const digit = 4
const maxbit = -1 << 31
func main() {
var data = []int32{421, 15, -175, 90, -2, 214, -52, -166}
fmt.Println("\n--- Unsorted --- \n\n", data)
radixsort(data)
fmt.Println("\n--- Sorted ---\n\n", data, "\n")
}
func radixsort(data []int32) {
buf := bytes.NewBuffer(nil)
ds := make([][]byte, len(data))
for i, e := range data {
binary.Write(buf, binary.LittleEndian, e^maxbit)
b := make([]byte, digit)
buf.Read(b)
ds[i] = b
}
countingSort := make([][][]byte, 256)
for i := 0; i < digit; i++ {
for _, b := range ds {
countingSort[b[i]] = append(countingSort[b[i]], b)
}
j := 0
for k, bs := range countingSort {
copy(ds[j:], bs)
j += len(bs)
countingSort[k] = bs[:0]
}
}
var w int32
for i, b := range ds {
buf.Write(b)
binary.Read(buf, binary.LittleEndian, &w)
data[i] = w^maxbit
}
}
Output
--- Unsorted ---
[421 15 -175 90 -2 214 -52 -166]
--- Sorted ---
[-175 -166 -52 -2 15 90 214 421]
Most Helpful This Week
Goroutines Channels order of execution
How to build a map of struct and append values to it?
How do you send an HTTP DELETE request in Go?
Panic: runtime error: index out of range error in Golang
Read and Write Fibonacci series to Channel in Golang
Cannot use <variable> as <type> value in return statement error in Golang