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