const a = [3,6,7,10,11,16,20,33,56,89];
const b = [41,4,5,1,3,16,20,33,56,89];
/**
* 折半查找
* @param arr 数组
* @param key 需要查找的关键字
* @param flag 是否需要排序
* @returns {number} 所在数组的索引
* @constructor
*/
let SelectOfMid = (arr , key , flag = false)=>{
let oldArr = arr;
/**
* 冒泡排序
* @param arr
* @returns {*}
* @constructor
*/
let OrderBy = (arr)=>{
for (let i = 0; i < arr.length; i++) {
for (let j = i; j < arr.length; j++) {
if (arr[i] > arr[j]){
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
};
arr = flag ? OrderBy(arr) : arr;
let beginIndex = 0;
let endIndex = arr.length - 1;
let midIndex = parseInt((beginIndex + endIndex) / 2);
while(key !== arr[midIndex]){
endIndex = key < arr[midIndex] ? midIndex - 1 : endIndex;
beginIndex = key > arr[midIndex] ? midIndex + 1 : beginIndex;
midIndex = parseInt((beginIndex + endIndex) / 2);
}
return {'index' : midIndex,'newArr':arr};
};
console.log(SelectOfMid(a , 56) , SelectOfMid(b , 56 , true));
//{ index: 8, newArr: [ 3, 6, 7, 10, 11, 16, 20, 33, 56, 89 ] } { index: 8, newArr: [ 1, 3, 4, 5, 16, 20, 33, 41, 56, 89 ] }