From b929919bfb6e84058302f97f64130a6e075fe6c9 Mon Sep 17 00:00:00 2001 From: Gregory Eremin Date: Mon, 12 Oct 2015 01:19:56 +0300 Subject: [PATCH] Implemented shuffle sort algorithm --- sort/shuffle_sort.go | 29 +++++++++++++++++++++++++++++ sort/shuffle_sort_test.go | 12 ++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 sort/shuffle_sort.go create mode 100644 sort/shuffle_sort_test.go diff --git a/sort/shuffle_sort.go b/sort/shuffle_sort.go new file mode 100644 index 0000000..1699ed7 --- /dev/null +++ b/sort/shuffle_sort.go @@ -0,0 +1,29 @@ +package sort + +import ( + "math/rand" +) + +// ShuffleSort is an implementation of shuffle sort algorithm. +func ShuffleSort(a []int) []int { + isSorted := func(a []int) bool { + for i := 1; i < len(a); i++ { + if a[i-1] > a[i] { + return false + } + } + + return true + } + + for { + if isSorted(a) { + return a + } + + for i := range a { + j := rand.Intn(i + 1) + a[i], a[j] = a[j], a[i] + } + } +} diff --git a/sort/shuffle_sort_test.go b/sort/shuffle_sort_test.go new file mode 100644 index 0000000..62e61ac --- /dev/null +++ b/sort/shuffle_sort_test.go @@ -0,0 +1,12 @@ +package sort + +import ( + "testing" +) + +func TestShuffleSort(t *testing.T) { + testSort(t, ShuffleSort, + []int{5, 3, 1, 4, 2}, + []int{1, 2, 3, 4, 5}, + ) +}