Kotlin實現二分查找

版本一

找到目標元素時返回其下標,未找到時返回-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
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章