版本一
找到目標元素時返回其下標,未找到時返回-1
fun binarySearch(list: ArrayList<Int>, target: Int): Int {
return binarySearch(list, target, 0, list.size - 1)
}
fun binarySearch(list: ArrayList<Int>, target: Int, minIndex: Int, maxIndex: Int): Int {
if (minIndex > maxIndex) return -1
val mid = (minIndex + maxIndex) / 2
return when {
target == list[mid] -> mid
target > list[mid] -> binarySearch(list, target, mid + 1, maxIndex)
target < list[mid] -> binarySearch(list, target, minIndex, mid - 1)
else -> -1
}
}
版本二
找到目標元素時返回其下標,未找到時 返回其應該插入的位置(在該位置插入後,數組仍保持有序)
fun binarySearch(list: ArrayList<Int>, target: Int): Int {
return search(list, target, 0, list.size - 1)
}
fun binarySearch(list: ArrayList<Int>, target: Int, minIndex: Int, maxIndex: Int): Int {
if (minIndex > maxIndex) return -1
if (target < list[minIndex]) return minIndex
if (target > list[maxIndex]) return maxIndex + 1
val mid = (minIndex + maxIndex) / 2
return when {
target == list[mid] -> mid
target > list[mid] -> search(list, target, mid + 1, maxIndex)
target < list[mid] -> search(list, target, minIndex, mid - 1)
else -> -1
}
}