| <script src="../resources/magnitude-perf.js"></script> |
| <script> |
| function setupFunction(magnitude) |
| { |
| array = []; |
| for (var i = 0; i < magnitude; i++) { |
| array[i] = i; |
| } |
| } |
| |
| function binarySearch(arry, val) { |
| if (!arry.length) |
| return -1; |
| return help(arry, val, 0, arry.length - 1); |
| } |
| |
| function help(arry, val, start, end) { |
| if (end == start) { |
| if (arry[end] == val) |
| return end; |
| else |
| return -1; |
| } |
| |
| var index = start + Math.floor((end - start) / 2); |
| if (arry[index] == val) |
| return index; |
| |
| if (arry[index] > val) { |
| if (index == start) |
| return -1; |
| return arguments.callee(arry, val, start, index - 1); |
| } |
| |
| if (index == end) |
| return -1; |
| |
| return arguments.callee(arry, val, index + 1, end); |
| } |
| |
| function test(magnitude) |
| { |
| binarySearch(array, 0); |
| } |
| |
| Magnitude.description("Tests that binary search over an array is logarithmic."); |
| Magnitude.run(setupFunction, test, Magnitude.LOGARITHMIC); |
| </script> |