2.2
Implement isSorted, which checks whether an Array[A] is sorted according to a given comparison function: def isSortedA => Boolean): Boolean
Solution
def isSorted[A](as: Array[A], ordered: (A, A) => Boolean): Boolean = {
@annotation.tailrec
def go(n: Int): Boolean =
if (n == as.length - 1) ordered(as(n-1), as(n))
else if (! ordered(as(n-1), as(n))) false
else go(n + 1)
if (as.size == 0 || as.size == 1) true
else go(1)
}
Run
@ isSorted[Int](Array(1,2,3,4), (a: Int, b: Int) => a <= b)
res18: Boolean = true
@ isSorted[Int](Array(1,2,3,4,1), (a: Int, b: Int) => a <= b)
res19: Boolean = false
@ isSorted[Int](Array(1), (a: Int, b: Int) => a <= b)
res20: Boolean = true
@ isSorted[Int](Array(), (a: Int, b: Int) => a <= b)
res21: Boolean = true
@ isSorted[Int](Array(2,1), (a: Int, b: Int) => a <= b)
res22: Boolean = false
@ isSorted[Int](Array(1,2,3,4,5,6,7,8,9,10), (a: Int, b: Int) => a <= b)
res23: Boolean = true