描述

在有序的数组里找出指定的值,返回该值在数组中的索引。

非递归实现

  1. var arr = [ 0, 3, 4, 6, 9, 11, 12, 46, 48, 50, 66, 71, 100 ];
  2. var binarySearch = function(seq, target) {
  3. var start = 0;
  4. var end = seq.length - 1;
  5. var pos = -1;
  6. var val;
  7. while(start <= end) {
  8. pos = Math.floor((start + end) / 2);
  9. val = seq[pos];
  10. if (val > target) {
  11. end = pos - 1;
  12. } else if (val < target) {
  13. start = pos + 1;
  14. } else {
  15. break;
  16. }
  17. }
  18. return start > end ? -1 : pos;
  19. };
  20. var index = binarySearch(arr, 11);
  21. console.log(index);

递归实现

  1. var arr = [ 0, 11, 12, 46, 48, 50, 66, 71, 100 ];
  2. var binarySearch = function(seq, target, start, end) {
  3. if (start > end) {
  4. return -1;
  5. }
  6. var pos = Math.floor((start + end) / 2);
  7. var val = seq[pos];
  8. if (val > target) {
  9. return binarySearch(seq, target, start, pos - 1);
  10. }
  11. if (val < target) {
  12. return binarySearch(seq, target, pos + 1, end);
  13. }
  14. if (val === target) {
  15. return pos;
  16. }
  17. }
  18. var index = binarySearch(arr, 0, 0, arr.length - 1);
  19. console.log(index);