commit
67434fca1a
@ -0,0 +1,47 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue