var arr = [1,3,4,6,6,6,8,9,13,15]; console.log(arr); //二分查找 / 折半查找 function binarysearch(array, key) { if (array.length === 0) return -1; let left = 0; let right = array.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (key === array[mid]) { return mid; } if (key < array[mid]){ right = mid - 1; } else { left = mid + 1; } } return -1; } let index = binarysearch(arr, 2); console.log(index); //查找第一个与key值相等的元素下标 function binarySearchFirst(array, key) { if (array.length === 0) return -1; let left = 0; let right = array.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (key <= array[mid]){ right = mid - 1; } else { left = mid + 1; } } if (arr[left] === key) return left; return -1; } console.log(binarySearchFirst(arr, 6)); //查找第一个大于等于key值的元素下标 function binarySearchFirstGreaterOrEqual(array, key) { if (array.length === 0) return -1; let left = 0; let right = array.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (key <= array[mid]){ right = mid - 1; } else { left = mid + 1; } } if (arr[left] >= key) return left; return -1; } console.log(binarySearchFirstGreaterOrEqual(arr, 6)); //查找第一个大于key值的元素下标 function binarySearchFirstGreater(array, key) { if (array.length === 0) return -1; let left = 0; let right = array.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (key < array[mid]){ right = mid - 1; } else { left = mid + 1; } } if (arr[left] > key) return left; return -1; } console.log(binarySearchFirst(arr, 6)); //查找最后一个与key值相等的元素下标 function binarySearchLast(array, key) { if (array.length === 0) return -1; let left = 0; let right = array.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (key < array[mid]){ right = mid - 1; } else { left = mid + 1; } } if (right >= 0 && arr[right] === key) return right; return -1; } console.log(binarySearchLast(arr, 6)); //查找最后一个小于等于key值的元素下标 function binarySearchLastLessOrEqual(array, key) { if (array.length === 0) return -1; let left = 0; let right = array.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (key < array[mid]){ right = mid - 1; } else { left = mid + 1; } } if (right >= 0 && arr[right] <= key) return right; return -1; } console.log(binarySearchLastLessOrEqual(arr, 6)); //查找最后一个小于等于key值的元素下标 function binarySearchLastLess(array, key) { if (array.length === 0) return -1; let left = 0; let right = array.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (key <= array[mid]){ right = mid - 1; } else { left = mid + 1; } } if (right >= 0 && arr[right] < key) return right; return -1; } console.log(binarySearchLastLess(arr, 6));
二分查找 / 折半查找的实现及其变种 -- JavaScript版
最新推荐文章于 2024-06-20 20:20:21 发布