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版
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.