1
0
Fork 0

Implemented selection sort algorithm

This commit is contained in:
Gregory Eremin 2015-10-12 01:00:01 +03:00
parent 93d896e73b
commit 0357c86f7d
No known key found for this signature in database
GPG Key ID: 5EFA427EEC26E86C
2 changed files with 45 additions and 0 deletions

27
sort/selection_sort.go Normal file
View File

@ -0,0 +1,27 @@
package sort
// SelectionSort is an impelementaion of selection sort algorithm.
// Wikipedia: https://en.wikipedia.org/wiki/Selection_sort
//
// The algorithm divides the input list into two parts: the sublist of items
// already sorted, which is built up from left to right at the front (left) of
// the list, and the sublist of items remaining to be sorted that occupy the
// rest of the list. Initially, the sorted sublist is empty and the unsorted
// sublist is the entire input list. The algorithm proceeds by finding the
// smallest (or largest, depending on sorting order) element in the unsorted
// sublist, exchanging (swapping) it with the leftmost unsorted element (putting
// it in sorted order), and moving the sublist boundaries one element to the
// right.
func SelectionSort(a []int) []int {
for i := 0; i < len(a); i++ {
min := i
for j := i + 1; j < len(a); j++ {
if a[j] < a[min] {
min = j
}
}
a[i], a[min] = a[min], a[i]
}
return a
}

View File

@ -0,0 +1,18 @@
package sort
import (
"testing"
)
func TestSelectionSort(t *testing.T) {
testSort(t, SelectionSort,
[]int{5, 3, 1, 4, 2},
[]int{1, 2, 3, 4, 5},
)
}
func BenchmarkSelectionSort(b *testing.B) {
for i := 0; i < b.N; i++ {
SelectionSort(unsortedArray())
}
}