pull/41/merge
Viviane Ramos Luz 2 years ago committed by GitHub
commit 99d2ec1cae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -29,6 +29,7 @@ Algorithms
* [Shell sort](https://en.wikipedia.org/wiki/Shellsort)
* [counting sort](https://en.wikipedia.org/wiki/Counting_sort)
* [radix sort](https://en.wikipedia.org/wiki/Radix_sort)
* [bead sort](https://en.wikipedia.org/wiki/Bead_sort)
#### Searching

@ -0,0 +1,53 @@
package main
import (
"sync"
)
/*
* Bead sort - https://en.wikipedia.org/wiki/Bead_sort
*/
func BeadSort(list []int) {
const bead = 'o'
max := 1000
all := make([]byte, max*len(list))
abacus := make([][]byte, max)
for pole, space := 0, all; pole < max; pole++ {
abacus[pole] = space[:len(list)]
space = space[len(list):]
}
var wg sync.WaitGroup
wg.Add(len(list))
for row, n := range list {
go func(row, n int) {
for pole := 0; pole < n; pole++ {
abacus[pole][row] = bead
}
wg.Done()
}(row, n)
}
wg.Wait()
wg.Add(max)
for _, pole := range abacus {
go func(pole []byte) {
top := 0
for row, space := range pole {
if space == bead {
pole[row] = 0
pole[top] = bead
top++
}
}
wg.Done()
}(pole)
}
wg.Wait()
for row := range list {
x := 0
for pole := 0; pole < max && abacus[pole][row] == bead; pole++ {
x++
}
list[len(list)-1-row] = x
}
}

@ -7,9 +7,9 @@ import (
utils "github.com/0xAX/go-algorithms"
)
var funcs = []struct{
var funcs = []struct {
name string
f Sort
f Sort
}{
{"shell", ShellSort},
{"selection", SelectionSort},
@ -21,6 +21,7 @@ var funcs = []struct{
{"comb", CombSort},
{"cocktail", CocktailSort},
{"bubble", BubbleSort},
{"bead", BeadSort},
}
func TestSort(t *testing.T) {

Loading…
Cancel
Save