binarySearch.js 679 B

123456789101112131415161718192021222324
  1. var isSorted = require('./isSorted');
  2. exports = function(arr, val) {
  3. var cmp =
  4. arguments.length > 2 && arguments[2] !== undefined
  5. ? arguments[2]
  6. : isSorted.defComparator;
  7. var startIdx = 0;
  8. var endIdx = arr.length - 1;
  9. while (startIdx <= endIdx) {
  10. var middleIdx = startIdx + Math.floor((endIdx - startIdx) / 2);
  11. var middleVal = arr[middleIdx];
  12. if (cmp(middleVal, val) === 0) {
  13. return middleIdx;
  14. }
  15. if (cmp(middleVal, val) < 0) {
  16. startIdx = middleIdx + 1;
  17. } else {
  18. endIdx = middleIdx - 1;
  19. }
  20. }
  21. return -1;
  22. };
  23. module.exports = exports;