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

پیاده جستجوی دودویی در جاوا
حال نوبت پیاده سازی رسیده است. برای پیاده سازی جستجوی دودویی در جاوا اول نیاز داریم که خانه های آرایه ما 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
System.out.println(Arrays.toString(numbers));//print sort array
int index = binarysearch(numbers, 5, 0, numbers.length-1);// search for 1
System.out.println(index);// index of 1 in numbers array(sort)
}
public static int binarysearch(int[] numbers, int search, int start,
int end) {
if (end < start) {
return -1;
}
// System.out.println("start "+start+ " end "+ end);
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);
}
}
کد جستجوی دودویی در جاوا به این صورت که ابتدا ما یک آرایه تعریف میکنیم و آرایه خود را مرتب میکنیم. بعد از مرتب کردن متد جستجوی دودویی در جاوا را صدا میزنیم تا عدد 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;
}
میشه بگین خروجی برنامه چیه ممنون میشم 🙂
سلام
خروجی کد این آموزش عدد 3 است یعنی اندیس عدد 5 درون آرایه.