Added BinarySearchIterative Function

* BinarySearchIterative Function is added
* BinarySearch function is renamed to BinarySearchRecurisve
* changes in test function
  - 3 binarySearchRecursive tests
  - 3 binarySearchIterative tests
This commit is contained in:
RitikDua
2020-10-01 21:24:12 +05:30
parent 87e16d5dab
commit c6a36987c8

View File

@ -7,7 +7,7 @@
* value is found or the interval is empty.
*/
function binarySearch (arr, x, low = 0, high = arr.length - 1) {
function binarySearchRecursive (arr, x, low = 0, high = arr.length - 1) {
const mid = Math.floor(low + (high - low) / 2)
if (high >= low) {
@ -18,10 +18,10 @@ function binarySearch (arr, x, low = 0, high = arr.length - 1) {
if (x < arr[mid]) {
// arr[mid] is an upper bound for x, so if x is in arr => low <= x < mid
return binarySearch(arr, x, low, mid - 1)
return binarySearchRecursive(arr, x, low, mid - 1)
} else {
// arr[mid] is a lower bound for x, so if x is in arr => mid < x <= high
return binarySearch(arr, x, mid + 1, high)
return binarySearchRecursive(arr, x, mid + 1, high)
}
} else {
// if low > high => we have searched the whole array without finding the item
@ -29,6 +29,29 @@ function binarySearch (arr, x, low = 0, high = arr.length - 1) {
}
}
function binarySearchIterative (arr, x, low = 0, high = arr.length - 1) {
while (high >= low) {
const mid = Math.floor(low + (high - low) / 2)
if (arr[mid] === x) {
// item found => return its index
return mid
}
if (x < arr[mid]) {
// arr[mid] is an upper bound for x, so if x is in arr => low <= x < mid
high = mid - 1
} else {
// arr[mid] is a lower bound for x, so if x is in arr => mid < x <= high
low = mid + 1
}
}
// if low > high => we have searched the whole array without finding the item
return -1
}
/* ---------------------------------- Test ---------------------------------- */
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
@ -61,10 +84,10 @@ const stringArr = [
'Zulu'
]
console.log(binarySearch(arr, 3))
console.log(binarySearch(arr, 7))
console.log(binarySearch(arr, 13))
console.log(binarySearchRecursive(arr, 3))
console.log(binarySearchIterative(arr, 7))
console.log(binarySearchRecursive(arr, 13))
console.log(binarySearch(stringArr, 'Charlie'))
console.log(binarySearch(stringArr, 'Zulu'))
console.log(binarySearch(stringArr, 'Sierra'))
console.log(binarySearchIterative(stringArr, 'Charlie'))
console.log(binarySearchRecursive(stringArr, 'Zulu'))
console.log(binarySearchIterative(stringArr, 'Sierra'))