Skip to content

Commit

Permalink
Merge pull request #168 from ashishkrishan1995/master
Browse files Browse the repository at this point in the history
radix sort in golang
  • Loading branch information
i-vishi authored Oct 6, 2018
2 parents 3ccf294 + 29ab3d1 commit d52dd8b
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions Sorting/Radix Sort/golang/radixsort.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Radix Sort in Golang
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
}
}

0 comments on commit d52dd8b

Please sign in to comment.