commit
54045b785b
1 changed files with 21 additions and 0 deletions
|
|
@ -237,6 +237,17 @@ template sortedByIt*(seq1, op: expr): expr =
|
||||||
result = cmp(a, b))
|
result = cmp(a, b))
|
||||||
result
|
result
|
||||||
|
|
||||||
|
proc isSorted*[T](a: openarray[T],
|
||||||
|
cmp: proc(x, y: T): int {.closure.},
|
||||||
|
order = SortOrder.Ascending): bool =
|
||||||
|
## Checks to see whether `a` is already sorted in `order`
|
||||||
|
## using `cmp` for the comparison. Parameters identical
|
||||||
|
## to `sort`
|
||||||
|
result = true
|
||||||
|
for i in 0..<len(a)-1:
|
||||||
|
if cmp(a[i],a[i+1]) * order > 0:
|
||||||
|
return false
|
||||||
|
|
||||||
proc product*[T](x: openArray[seq[T]]): seq[seq[T]] =
|
proc product*[T](x: openArray[seq[T]]): seq[seq[T]] =
|
||||||
## produces the Cartesian product of the array. Warning: complexity
|
## produces the Cartesian product of the array. Warning: complexity
|
||||||
## may explode.
|
## may explode.
|
||||||
|
|
@ -340,4 +351,14 @@ when isMainModule:
|
||||||
assert arr.lowerBound(4) == 1
|
assert arr.lowerBound(4) == 1
|
||||||
assert arr.lowerBound(5) == 1
|
assert arr.lowerBound(5) == 1
|
||||||
assert arr.lowerBound(6) == 2
|
assert arr.lowerBound(6) == 2
|
||||||
|
# Tests for isSorted
|
||||||
|
var srt1 = [1,2,3,4,4,4,4,5]
|
||||||
|
var srt2 = ["iello","hello"]
|
||||||
|
var srt3 = [1.0,1.0,1.0]
|
||||||
|
var srt4 = []
|
||||||
|
assert srt1.isSorted(cmp) == true
|
||||||
|
assert srt2.isSorted(cmp) == false
|
||||||
|
assert srt3.isSorted(cmp) == true
|
||||||
|
var srtseq = newSeq[int]()
|
||||||
|
assert srtseq.isSorted(cmp) == true
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue