Repository

Array bisection algorithm for the V language .

Installation

v install mobarski.bisect

Usage

All the following functions return the insertion index that maintains sorted order of the array. They differ in the way they handle identical values:

  • bisect.left<T>(a []T, x T) int - return index to the left in case of equal value
  • bisect.right<T>(a []T, x T) int - return index to the right in case of equal value
  • bisect.first_available<T>(a []T, x T) int - return first available index (fastest)

Examples

Simple example:

import mobarski.bisect

mut a := []int{}
for x in [4,5,1,9,7,8,3,2,6] {
    i := bisect.left<int>(a, x)
    a.insert(i, x)
}
println(a) // [1,2,3,4,5,6,7,8,9]

Detailed example:

import mobarski.bisect

// index: 0  1 2 3 4
a := [int(2),2,2,4,6]

println(bisect.left<int>(a, 1))            // 0
println(bisect.right<int>(a, 1))           // 0
println(bisect.first_available<int>(a, 1)) // 0

println(bisect.left<int>(a, 2))            // 0
println(bisect.right<int>(a, 2))           // 3
println(bisect.first_available<int>(a, 2)) // anything from 0 to 3

println(bisect.left<int>(a, 3))            // 3
println(bisect.right<int>(a, 3))           // 3
println(bisect.first_available<int>(a, 3)) // 3

println(bisect.left<int>(a, 4))            // 3
println(bisect.right<int>(a, 4))           // 4
println(bisect.first_available<int>(a, 4)) // 3 or 4

println(bisect.left<int>(a, 8))            // 5
println(bisect.right<int>(a, 8))           // 5
println(bisect.first_available<int>(a, 8)) // 5

About

0
69
last May 7

Author

mobarski