الدرس 4 من 8
البحث الثنائي
- 14 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
من ألف مقارنة إلى عشر
الشرح
البحث الخطّي يمرّ على العناصر واحدًا واحدًا، فإذا كان عندك مليون عنصر احتجت إلى مليون مقارنة، أما إن كانت المصفوفة مرتّبة فتكفيك عشرون مقارنة.
والفكرة أن تنظر إلى العنصر الذي في الوسط، فإن كان هو ما تبحث عنه فقد انتهيت، وإن كان أكبر منه فما تبحث عنه في النصف الأيسر، وإلا فهو في النصف الأيمن، وهكذا تستبعد في كل خطوة نصف ما تبقّى.
وانتبه إلى أمرين، الأول أن تكتب الشرط while (lo <= hi) بالمساواة لأنك بدونها تفوّت آخر خانة، والثاني أن تحسب الوسط بـ Math.floor((lo + hi) / 2).
المطلوب
اكتب binarySearch(sorted, target) لتُرجع موضع العنصر إن وجدته، أو -1 إن لم تجده.
الفحوص
6 فحوص- يجد قيمة في الوسط
- يجد الأول والأخير
- يُرجع -1 للقيمة غير الموجودة
- المصفوفة الفارغة تُرجع -1 دون أن تعلّق الصفحة
- يجد العناصر في مواضع مختلفة من مصفوفة كبيرة
- القيمة الأصغر أو الأكبر من كل العناصر تُرجع -1