const array = [0, 3, 6, 17, 35, 100, 98, 66, 88, 58, 23, 45, 45, 34, 11];
function quickSort(array) {
if (array.length <= 1) {
return array;
}
const midIndex = Math.floor(array.length / 2);
const mid = array.splice(midIndex, 1)[0];
const left = [];
const right = [];
for (let i = 0; i < array.length; i++) {
if (array[i] < mid) {
left.push(array[i]);
} else {
right.push(array[i]);
}
}
return quickSort(left).concat([mid], quickSort(right));
}
function binarySearch(array, search, pos = 0) {
if (!Array.isArray(array)) throw new Error(`params type error`);
const len = array.length;
const midIndex = Math.floor((len - 1) / 2);
if (array[midIndex] === search) {
console.log(`${search} is at ${pos + midIndex}`);
} else if (array[midIndex] < search) {
return binarySearch(array.slice(midIndex + 1), search, pos + midIndex + 1);
} else if (array[midIndex] > search) {
return binarySearch(array.slice(0, midIndex), search, pos);
} else {
console.log(`no found ${search}`);
}
}
const sortArray = quickSort(array);
binarySearch(sortArray, 51);
binarySearch(sortArray, 66);