
- بواسطة x32x01 ||
يا زعيم، لو عندك مصفوفة مرتبة (Sorted Array) سواء تصاعدي (ASC) أو تنازلي (DESC)، يبقى من غير تفكير الحل الأمثل هو خوارزمية البحث الثنائي (Binary Search) 
الخوارزمية دي مش بس سريعة، دي كمان بتوفر وقت ومجهود رهيب مقارنة بالـ Linear Search اللي بتدور عنصر عنصر لحد ما توصل للهدف.
تعال نوضح الفرق بينهم بالأمثلة
دي الطريقة التقليدية جدًا. بتبدأ من أول عنصر في المصفوفة وتمشي لحد ما تلاقي العنصر اللي بتدور عليه.
عندك Array فيها الأرقام من 1 إلى 100، وعايز تدور على الرقم 67.
ده معناه إن الـ Time Complexity = O
، وده بيساوي الوقت اللي بياخده حسب طول المصفوفة.
دي الطريقة العبقرية اللي بنستخدمها لما المصفوفة تكون مرتبة Sorted.
الفكرة ببساطة: بدل ما تمشي عنصر عنصر، بتقسم المصفوفة لنصين في كل خطوة، وبتستبعد النص اللي مش محتاجه.
تعالى نشوف مثال
عندنا المصفوفة [1, 2, 3, ..., 100] وعايزين نلاقي الرقم 67.
الخطوات:
عدد الخطوات: 6 فقط بدل 67!
وده لأن الـ Time Complexity = O(log n) - أسرع بكتير جدًا
باختصار، لو المصفوفة مرتبة، استخدم Binary Search على طول - هتوفر وقت رهيب 
ولو المقال فادك، ادعمه بـ
أو Share عشان غيرك كمان يستفيد 

الخوارزمية دي مش بس سريعة، دي كمان بتوفر وقت ومجهود رهيب مقارنة بالـ Linear Search اللي بتدور عنصر عنصر لحد ما توصل للهدف.
تعال نوضح الفرق بينهم بالأمثلة

الطريقة الأولى: Linear Search
دي الطريقة التقليدية جدًا. بتبدأ من أول عنصر في المصفوفة وتمشي لحد ما تلاقي العنصر اللي بتدور عليه.
مثال عملي:
عندك Array فيها الأرقام من 1 إلى 100، وعايز تدور على الرقم 67.- في Linear Search، هتمشي عنصر عنصر:
من 1 → 2 → 3 → ... لحد ما توصل لـ 67.
يعني مشيت 67 خطوة كاملة
ده معناه إن الـ Time Complexity = O
الطريقة التانية: Binary Search
دي الطريقة العبقرية اللي بنستخدمها لما المصفوفة تكون مرتبة Sorted.الفكرة ببساطة: بدل ما تمشي عنصر عنصر، بتقسم المصفوفة لنصين في كل خطوة، وبتستبعد النص اللي مش محتاجه.
تعالى نشوف مثال

مثال عملي:
عندنا المصفوفة [1, 2, 3, ..., 100] وعايزين نلاقي الرقم 67.
- نقسم المصفوفة لنصين:
[1..50] و [51..100]
الرقم 67 مش في النص الأول → نستبعده - نشتغل على [51..100]، نقسمها تاني:
[51..75] و [76..100]
الرقم 67 في الرينج الأول → نبحث فيه - نقسم [51..75]:
[51..62] و [63..75]
الرقم 67 مش في الأول → نستبعده - نبحث في [63..75] ونقسمها تاني:
[63..69] و [70..75]
الرقم 67 في الأول → نبحث فيه - نقسم [63..69]:
[63..66] و [67..69]
الرقم 67 في التاني → نبحث فيه - نحسب منتصف [67..69]:
mid = Math.floor((67 + 69) / 2) = 68
نقارن… الرقم أصغر من 68 → يبقى 67 هو اللي بندور عليه

وده لأن الـ Time Complexity = O(log n) - أسرع بكتير جدًا

كود تنفيذ Binary Search في
JavaScript:
JavaScript
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1; // العنصر مش موجود
}
// تجربة بسيطة
const numbers = Array.from({ length: 100 }, (_, i) => i + 1);
console.log(binarySearch(numbers, 67)); // الناتج: 66 (بسبب الـ index)
ملاحظات مهمة
- لازم المصفوفة تكون مرتبة Sorted قبل ما تستخدم Binary Search.
- لو المصفوفة غير مرتبة، استخدم Linear Search بدلها.
- الفرق في الأداء بيبان جدًا لما المصفوفة تكون كبيرة.
الخلاصة
الطريقة | السرعة | نوع البيانات المطلوبة | التعقيد الزمني |
---|---|---|---|
Linear Search | بطيئة نسبيًا ![]() | أي Array | O |
Binary Search | سريعة جدًا ![]() | Sorted Array | O(log n) |


ولو المقال فادك، ادعمه بـ


التعديل الأخير: