#c, ساختمان داده در سی شارپ, سی شارپ, ویدئو آموزشی سی شارپ

جستجوی دودویی در سی شارپ (Binary Search)

جستجوی دودویی در سی شارپ

در این قسمت تیم کدگیت را با آموزش جستجوی دودویی در سی شارپ همراهی کنید. پیش نیاز های این آموزش عبارتند از:

  1. آرایه
  2. متد
  3. الگوریتم بازگشتی

الگوریتم جستجوی دودویی

الگوریتم جستجوی دودویی : تکنیکی است برای یافتن یک مقدار عددی از میان مجموعه‌ای از اعداد مرتب. این متد محدوده جستجو را در هر مرحله به نصف کاهش می‌دهد، بنابراین هدف مورد نظر یا به زودی پیدا می‌شود و یا مشخص می‌شود که مقدار مورد جستجو در فهرست وجود ندارد.

جستجوی دودویی فقط در آرایه های مرتب استفاده می شود.در این روش عنصر مورد نظر با خانه وسط آرایه مقایسه می شود اگر با این خانه برابر بود جستجو تمام می شود اگر عنصر مورد جستجو از خانه وسط بزرگتر بود جستجو در بخش بالایی آرایه و در غیر این صورت جستجو در بخش پایینی آرایه انجام می شود(فرض کرده ایم آرایه به صورت صعودی مرتب شده است) این رویه تا یافتن عنصر مورد نظر یا بررسی کل خانه های آرایه ادامه می یابد. جستجوی دودویی نمونه‌ای از الگوریتمهای تقسیم و غلبه می‌باشد.

جست و جوی دودویی

پیاده جستجوی دودویی در سی شارپ

حال نوبت پیاده سازی رسیده است. برای پیاده سازی جستجوی دودویی در سی شارپ  اول نیاز داریم که خانه های آرایه ما sort باشد پس یک کلاس Sort مینویسیم که از مرتب سازی حبابی استفاده میکند.کد این کلاس به صورت زیر است:

public class Sort
    {
        public static void sort(int[] numbers) {
            for (int i = 0; i < numbers.Length; i++) {
                for (int j = 0; j < numbers.Length - 1; j++) {
                    if (numbers[j + 1] < numbers[j]) {
                        // swaping
                        int temp = numbers[j];
                        numbers[j] = numbers[j + 1];
                        numbers[j + 1] = temp;
                    }
                }
            }
        }
    }

بعد یک کلاس مینویسیم که جست و جوی دودویی ما درون آن باشد.اسم کلاس را Testbinarysearch میگذاریم. در این کلاس دو متد قرار دارد: 1. Main 2. Binarysearch. این کلاس ها از اسمشان کاربرشان معلوم است نیاز به توضیح اضافی ندارد!!! کد این کلاس به صورت زیر است:

public static void Main (string[] args)
        {
            int[] numbers = { 2, 5, 1, 3, 9, 6, 7 };
            Sort.sort(numbers);//sort numbers
            printNumbers(numbers);//print sort array
            int index = binarysearch(numbers, 5, 0, numbers.Length-1);// search for 5

            Console.WriteLine(index);// index of 5 in numbers array(sort)

            Console.ReadKey ();
        }

        public static int binarysearch(int[] numbers, int search, int start,
            int end) {
            if (end < start) {
                return -1;
            }
            int mid = (end + start) / 2;
            if (numbers[mid] == search) {
                return mid;
            }
            if (search > numbers[mid]) {
                return binarysearch(numbers, search, mid+1, end);
            }else{
                return binarysearch(numbers, search, start, mid-1);
            }



        }

        private static void printNumbers(int[] input) {
            for (int i = 0; i < input.Length; i++) {
                Console.Write(input[i] + ", ");
            }
            Console.WriteLine();
        }

کد جستجوی دودویی در سی شارپ به این صورت که ابتدا ما یک آرایه تعریف میکنیم و آرایه خود را مرتب میکنیم. بعد از مرتب کردن متد جستجوی دودویی در سی شارپ را صدا میزنیم تا عدد 5 را پیدا کند. در صورتی که پیدا شد اندیس آن خانه را در آرایه به برمیگرداند و اگر نبود 1- برمیگرداند.

در متد جستجوی دودویی در سی شارپ یک متغیر mid داریم که وسط آرایه است. همانطوری که گفته شد ابتدا چک میکنیم که عددی به دنبال آن هستیم با خانه وسط یکی است یا خیر.

           if (numbers[mid] == search) {
                return mid;
            }

اگر حالت گفته شد اتفاق نیفتاد باید به جست و جو ادامه بدهیم. اگر عددی که به دنبال آن هستیم بزرگتر از خانه وسط بود سمت راست آرایه را جست و جو میکنیم.

         if (search > numbers[mid]) {
                return binarysearch(numbers, search, mid+1, end);
            }

در غیر این صورت سمت چپ به دنبال آن میرویم.

else{
                return binarysearch(numbers, search, start, mid-1);
            }

قبل از هر کاری هم یک بررسی کوچک میکنیم ببینیم خانه ای برای جست و جو باقی مانده است یا نه!!!!

            if (end < start) {
                return -1;
            }

پسورد: www.codegate.ir

نوشته های مشابه