Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การค้นหาในอาร์เรย์ด้วย Binary Search ใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลขที่เรียงแล้ว (เพิ่มขึ้น) arr เป็นอาร์กิวเมนต์แรก และตัวเลขเป้าหมายเป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันควรค้นหา target ในอาร์เรย์ arr โดยใช้อัลกอริทึม binary search เนื่องจากอาร์เรย์เรียงแล้ว

หาก target มีอยู่ ให้คืนค่าดัชนี มิฉะนั้นคืนค่า -1

ตัวอย่างเช่น หากอินพุตคือ

อินพุต

const arr = [3, 5, 7, 9, 11, 13, 15, 16, 18, 21, 24, 25, 28];
const target = 13;

เอาต์พุต

const output = 5;

ตัวอย่างโค้ด

const arr = [3, 5, 7, 9, 11, 13, 15, 16, 18, 21, 24, 25, 28];
const target = 13;
const binarySearch = (arr = [], target) => {
const helper = (low, high) => {
if (low > high) return -1;
const middle = Math.floor((low + high) / 2);
if (arr[middle] === target) return middle;
if (arr[middle] < target) return helper(middle + 1, high);
return helper(low, middle - 1);
};
return helper(0, arr.length - 1);
};
console.log(binarySearch(arr, target));

ผลลัพธ์

5