sortition type definition + benchmarks and tests

pull/24/head
decanus 4 years ago
parent 9f095a1fbe
commit ddaf7f7c38
No known key found for this signature in database
GPG Key ID: E95B8C69228FF5B4

@ -4,15 +4,7 @@ package main
* Bubble sort - http://en.wikipedia.org/wiki/Bubble_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func BubbleSort(arr []int) {
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
@ -20,6 +12,4 @@ func main() {
}
}
}
fmt.Println("Sorted array is: ", arr)
}

@ -4,15 +4,7 @@ package main
* Cocktail sort - https://en.wikipedia.org/wiki/Cocktail_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func CocktailSort(arr []int) {
tmp := 0
for i := 0; i < len(arr)/2; i++ {
@ -38,6 +30,5 @@ func main() {
right--
}
}
fmt.Println("Sorted array is: ", arr)
}

@ -4,15 +4,7 @@ package main
* Comb sort - https://en.wikipedia.org/wiki/Combsort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func CombSort(arr []int) {
tmp := 0
arrLen := len(arr)
gap := arrLen
@ -27,6 +19,4 @@ func main() {
}
}
}
fmt.Println("Sorted array is: ", arr)
}

@ -4,10 +4,6 @@ package main
* Counting sort - https://en.wikipedia.org/wiki/Counting_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func getK(arr []int) int {
if len(arr) == 0 {
return 1
@ -24,14 +20,10 @@ func getK(arr []int) int {
return k+1
}
func main(){
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func CountingSort(arr []int) {
k := getK(arr)
array_of_counts := make([]int, k)
for i:= 0; i < len(arr); i++ {
array_of_counts[arr[i]] += 1
}
@ -47,6 +39,4 @@ func main(){
break
}
}
fmt.Println("Sorted array is: ", arr)
}

@ -3,16 +3,7 @@ package main
/*
* Gnome sort - https://en.wikipedia.org/wiki/Gnome_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func GnomeSort(arr []int) {
i := 1
tmp := 0
for ; i < len(arr) ; {
@ -28,7 +19,4 @@ func main() {
}
}
}
fmt.Println("Sorted array is: ", arr)
}

@ -4,10 +4,6 @@ package main
* Heap sort - https://en.wikipedia.org/wiki/Heapsort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func sift(arr []int, i int, arrLen int) []int {
done := false
@ -36,24 +32,18 @@ func sift(arr []int, i int, arrLen int) []int {
return arr
}
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func HeapSort(arr []int) {
i := 0
tmp := 0
for i = len(arr) / 2 - 1; i >= 0; i-- {
arr = sift(arr, i, len(arr))
}
for i = len(arr) - 1; i >= 1; i-- {
tmp = arr[0];
arr[0] = arr[i];
arr[i] = tmp;
arr = sift(arr, 0, i);
}
fmt.Println("Sorted array is: ", arr)
}

@ -4,19 +4,7 @@ package main
* Insertion sort - https://en.wikipedia.org/wiki/Insertion_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
if len(arr) <= 1 {
fmt.Println("Sorted array is: ", arr)
return
}
func InsertionSort(arr []int) {
var i, j int
for i = 1; i < len(arr); i++ {
for j = 0; j < i; j++ {
@ -25,6 +13,4 @@ func main() {
}
}
}
fmt.Println("Sorted array is: ", arr)
}

@ -4,10 +4,6 @@ package main
* Merge sort - http://en.wikipedia.org/wiki/Merge_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func Merge(left, right []int) []int {
result := make([]int, 0, len(left) + len(right))
@ -42,11 +38,3 @@ func MergeSort(arr []int) []int {
return Merge(left, right)
}
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
fmt.Println("Sorted array: ", MergeSort(arr))
}

@ -4,21 +4,13 @@ package main
* Odd-Even sort - https://en.wikipedia.org/wiki/Odd-even_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func OddEvenSort(arr []int) {
tmp, isSorted := 0, false
for ; isSorted == false ; {
for isSorted == false {
isSorted = true
for i := 1; i < len(arr) - 1; i = i + 2 {
if arr[i] > arr[i + 1] {
tmp = arr[i]
@ -39,6 +31,4 @@ func main() {
}
}
}
fmt.Println("Sorted array is: ", arr)
}

@ -4,11 +4,8 @@ package main
* Quick sort - https://en.wikipedia.org/wiki/Quicksort
*/
import "fmt"
import "math/rand"
import "github.com/0xAX/go-algorithms"
func quick_sort(arr []int) []int {
if len(arr) <= 1 {
@ -41,9 +38,9 @@ func quick_sort(arr []int) []int {
return low_part
}
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
fmt.Println("Sorted array is: ", quick_sort(arr))
}
//func main() {
// arr := utils.RandArray(10)
// fmt.Println("Initial array is:", arr)
// fmt.Println("")
// fmt.Println("Sorted array is: ", quick_sort(arr))
//}

@ -4,15 +4,7 @@ package main
* Selection sort - http://en.wikipedia.org/wiki/Selection_sort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
func SelectionSort(arr []int) {
var min int = 0
var tmp int = 0
@ -23,11 +15,9 @@ func main() {
min = j
}
}
tmp = arr[i]
arr[i] = arr[min]
arr[min] = tmp
}
fmt.Println("Sorted array: ", arr)
}

@ -3,23 +3,12 @@ package main
/*
* Shell sort - http://en.wikipedia.org/wiki/Shellsort
*/
import "fmt"
import "github.com/0xAX/go-algorithms"
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
for d := int(len(arr)/2); d > 0; d /= 2 {
for i := d; i < len(arr); i++ {
for j := i; j >= d && arr[j-d] > arr[j]; j -= d {
arr[j], arr[j-d] = arr[j-d], arr[j]
}
}
}
fmt.Println("Sorted array is: ", arr)
}
func ShellSort(arr []int) {
for d := int(len(arr)/2); d > 0; d /= 2 {
for i := d; i < len(arr); i++ {
for j := i; j >= d && arr[j-d] > arr[j]; j -= d {
arr[j], arr[j-d] = arr[j-d], arr[j]
}
}
}
}

@ -0,0 +1,4 @@
package main
// @todo remove return
type Sort func([]int)

@ -0,0 +1,63 @@
package main
import (
"testing"
utils "github.com/0xAX/go-algorithms"
)
var funcs = []struct{
name string
f Sort
}{
{"shell", ShellSort},
{"selection", SelectionSort},
{"oddeven", OddEvenSort},
{"insertion", InsertionSort},
{"heap", HeapSort},
{"gnome", GnomeSort},
{"counting", CountingSort},
{"comb", CombSort},
{"cocktail", CocktailSort},
{"bubble", BubbleSort},
}
func TestSort(t *testing.T) {
for _, tt := range funcs {
t.Run(tt.name, func(t *testing.T) {
arr := utils.RandArray(10)
tt.f(arr)
if !isSorted(arr) {
t.Errorf("%v is not sorted", arr)
}
})
}
}
func BenchmarkSort(b *testing.B) {
for _, tt := range funcs {
arrs := make([][]int, 0)
for n := 0; n < b.N; n++ {
arrs = append(arrs, utils.RandArray(10))
}
b.Run(tt.name, func(b *testing.B) {
for n := 0; n < len(arrs); n++ {
tt.f(arrs[n])
}
})
}
}
func isSorted(arr []int) bool {
for i := 0; i < len(arr) - 1; i++ {
if arr[i] > arr[i + 1] {
return false
}
}
return true
}
Loading…
Cancel
Save