From 22a9e841eb110fc7c1af3663ccb742ce70a50796 Mon Sep 17 00:00:00 2001 From: Alexander Kuleshov Date: Fri, 2 Feb 2018 00:42:22 +0600 Subject: [PATCH] move cocktail sort to separate package Signed-off-by: Alexander Kuleshov --- sort/cocktail_sort/cocktail_sort.go | 59 +++++++++--------------- sort/cocktail_sort/cocktail_sort_test.go | 25 ++++++++++ 2 files changed, 47 insertions(+), 37 deletions(-) create mode 100644 sort/cocktail_sort/cocktail_sort_test.go diff --git a/sort/cocktail_sort/cocktail_sort.go b/sort/cocktail_sort/cocktail_sort.go index f09750e..00af8bb 100644 --- a/sort/cocktail_sort/cocktail_sort.go +++ b/sort/cocktail_sort/cocktail_sort.go @@ -1,43 +1,28 @@ -package main +package cocktal_sort -/* - * Cocktail sort - https://en.wikipedia.org/wiki/Cocktail_sort - */ +import ( + sortable "github.com/0xAX/go-algorithms/sort" +) -import "fmt" +func Sort(data sortable.Sortable) sortable.Sortable { + for i := 0; i < data.Len()/2; i++ { + left := 0 + right := data.Len() - 1 -import "github.com/0xAX/go-algorithms" + for left <= right { + if data.Less(left+1, left) { + data.Swap(left, left+1) + } -func main() { - arr := utils.RandArray(10) - fmt.Println("Initial array is:", arr) - fmt.Println("") - - tmp := 0 - - for i := 0; i < len(arr) / 2; i++ { - left := 0 - right := len(arr) - 1 - - for ; left <= right ; { - - if arr[left] > arr[left + 1] { - tmp = arr[left] - arr[left] = arr[left + 1] - arr[left + 1] = tmp - } - - left++ - - if arr[right - 1] > arr[right] { - tmp = arr[right - 1] - arr[right - 1] = arr[right] - arr[right] = tmp - } + left++ - right-- - } - } - - fmt.Println("Sorted array is: ", arr) + if data.Less(right, right-1) { + data.Swap(right, right-1) + } + + right-- + } + } + + return data } diff --git a/sort/cocktail_sort/cocktail_sort_test.go b/sort/cocktail_sort/cocktail_sort_test.go new file mode 100644 index 0000000..6ceb7ee --- /dev/null +++ b/sort/cocktail_sort/cocktail_sort_test.go @@ -0,0 +1,25 @@ +package cocktal_sort + +import ( + sortable "github.com/0xAX/go-algorithms/sort" + "math/rand" + "testing" +) + +func TestSort(t *testing.T) { + var s = make(sortable.IntSlice, 10) + + for i := 0; i < 10; i++ { + s[i] = rand.Intn(i + 1) + } + + Sort(&s) + + for i := 0; i < 10; i++ { + if i != 9 { + if s[i] > s[i+1] { + t.Fatal("s[i] > s[i + 1]", s[i], s[i+1]) + } + } + } +}