This commit is contained in:
Andreas Rumpf 2017-03-29 09:05:45 +02:00
commit a88a909565

View file

@ -112,8 +112,7 @@ proc lowerBound*[T](a: openArray[T], key: T, cmp: proc(x,y: T): int {.closure.})
count = step count = step
proc lowerBound*[T](a: openArray[T], key: T): int = lowerBound(a, key, cmp[T]) proc lowerBound*[T](a: openArray[T], key: T): int = lowerBound(a, key, cmp[T])
proc merge[T](a, b: var openArray[T], lo, m, hi: int,
cmp: proc (x, y: T): int {.closure.}, order: SortOrder) =
template `<-` (a, b) = template `<-` (a, b) =
when false: when false:
a = b a = b
@ -121,6 +120,9 @@ proc merge[T](a, b: var openArray[T], lo, m, hi: int,
shallowCopy(a, b) shallowCopy(a, b)
else: else:
copyMem(addr(a), addr(b), sizeof(T)) copyMem(addr(a), addr(b), sizeof(T))
proc merge[T](a, b: var openArray[T], lo, m, hi: int,
cmp: proc (x, y: T): int {.closure.}, order: SortOrder) =
# optimization: If max(left) <= min(right) there is nothing to do! # optimization: If max(left) <= min(right) there is nothing to do!
# 1 2 3 4 ## 5 6 7 8 # 1 2 3 4 ## 5 6 7 8
# -> O(n) for sorted arrays. # -> O(n) for sorted arrays.