✍️ جستوجوی دودویی با نگاه به وسط، نیمی از محدوده را کنار میگذارد. این تصمیم فقط وقتی معتبر است که عددها به ترتیب باشند. اگر وسط از هدف کوچکتر باشد، فقط در فهرست صعودی میدانیم همه خانههای سمت چپ هم نمیتوانند جواب باشند. روی ورودی نامرتب، همین حذف ممکن است جواب واقعی را دور بیندازد.
مثلاً [1, 4, 4, 9] مرتب است، چون هیچ عضو از عضو قبلی کوچکتر نیست. تکرار چهار اشکالی ندارد؛ اینجا صعودی را به معنی «غیرکاهشی» میگیریم. اما [1, 7, 3] در آخرین همسایگی ترتیب را میشکند. برای تشخیص، فقط همسایهها را بررسی کن؛ لازم نیست همه زوجها را بسنجی.
توی تابع ناقص، با دیدن اولین افت مقدار False برگردون. اگر همه همسایهها درست بودند، نتیجه True است. فهرست خالی و تکعضوی هم مرتب محسوب میشوند چون هیچ همسایگی خلاف ترتیب ندارند. خطای رایج استفاده از >= برای رد کردن است؛ آن شرط دو عضو برابر را هم اشتباه نامرتب اعلام میکند. این بررسی خودش خطی است و معمولاً یک بار قبل از مجموعه جستوجوها انجام میشود.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع is_sorted(nums) برای فهرست عددهای صحیح True برگرداند اگر nums[i-1] <= nums[i] در تمام همسایگیها برقرار باشد، وگرنه False. خالی، تکعضوی و عددهای مساوی مرتباند؛ [1,3,2] نامرتب است. ورودی را مرتب یا تغییر نده. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.