Implemented selection sort algorithm
This commit is contained in:
parent
93d896e73b
commit
0357c86f7d
|
@ -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
|
||||||
|
}
|
|
@ -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())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue