1
0
Fork 0
algorithms-go/sort/binary_insertion_sort.go

29 lines
487 B
Go
Raw Permalink Normal View History

2015-10-11 21:32:38 +00:00
package sort
// BinaryInsertionSort is an implementation of binary insertion sort algorithm.
// Wikipedia: https://en.wikipedia.org/wiki/Insertion_sort#Variants
func BinaryInsertionSort(a []int) []int {
for i := 1; i < len(a); i++ {
v := a[i]
2015-10-11 21:32:38 +00:00
first := 0
last := i
2015-10-11 21:32:38 +00:00
for first < last {
mid := first + (last-first)/2
if v < a[mid] {
2015-10-11 21:32:38 +00:00
last = mid
} else {
2015-10-11 21:32:38 +00:00
first = mid + 1
}
}
2015-10-11 21:32:38 +00:00
for j := i; j > first; j-- {
a[j] = a[j-1]
}
2015-10-11 21:32:38 +00:00
a[first] = v
}
return a
}