前提:数组必须是有序的,而且是自然顺序
var arr = [1, 2, 3, 4, 5, 6, 7];
1、首先获取开始下标;
startIndex=0;
2、获取结束下标;
endIndex=arr.length-1//---->6;
3、获取中间下标;
midIndex=Math.floor((startIndex+endIndex)/2);
4、要查找的元素和中间下标对应的元素做对比:
(1)要查找的元素=中间下标对应的元素
中间的下标就是要查找元素的下标
(2)要查找的元素>中间下标对应的元素
那么开始下标的位置会发生改变:startIndex=midIndex+1;
(3)要查找的元素<中间下标对应的元素
那么结束下标的位置会发上改变:endIndex=midIndex-1;
方法一:
var arr = [1, 2, 3, 4, 5, 6, 7];
function getIndex(arr, ele) {
//1.获取开始下标
var startIndex = 0;
//2.获取最终下标
var endIndex = arr.length - 1;
//循环的条件 开始下标 <= 结束下标
while (startIndex <= endIndex) {
//3.获取中间下标
var midIndex = Math.floor((startIndex + endIndex) / 2);
//将要查找元素与中间下标对应元素的值做对比
if (ele > arr[midIndex]) {
startIndex = midIndex + 1;
} else if (ele < arr[midIndex]) {
endIndex = midIndex - 1;
} else {
return midIndex;
}
}
return -1;
}
方法二(在原型上):
var arr = [1, 2, 3, 4, 5, 6, 7];
Array.prototype.getIndex = function (ele) {
//1.获取开始下标
var startIndex = 0;
//2.获取最终下标
var endIndex = this.length - 1;
//循环的条件 开始下标 <= 结束下标
while (startIndex <= endIndex) {
//3.获取中间下标
var midIndex = Math.floor((startIndex + endIndex) / 2);
//将要查找元素与中间下标对应元素的值做对比
if (ele > this[midIndex]) {
startIndex = midIndex + 1;
} else if (ele < this[midIndex]) {
endIndex = midIndex - 1;
} else {
return midIndex;
}
}
return -1;
};
console.log(arr.getIndex(6));