การค้นหาแบบไบนารีเป็นวิธีการในการค้นหาองค์ประกอบที่จำเป็นในอาร์เรย์ที่จัดเรียงโดยลดขนาดอาร์เรย์ลงครึ่งหนึ่งซ้ำแล้วซ้ำอีกและค้นหาครึ่งหนึ่ง
วิธีนี้ทำได้โดยเริ่มจากอาร์เรย์ทั้งหมด จากนั้นจะลดลงครึ่งหนึ่ง หากค่าข้อมูลที่ต้องการมากกว่าองค์ประกอบที่อยู่ตรงกลางอาร์เรย์ จะพิจารณาครึ่งบนของอาร์เรย์ มิฉะนั้นจะถือว่าครึ่งล่าง สิ่งนี้ทำอย่างต่อเนื่องจนกว่าจะได้ค่าข้อมูลที่ต้องการหรืออาร์เรย์ที่เหลือว่างเปล่า
โปรแกรมที่แสดงการค้นหาไบนารีใน C ++ แสดงไว้ด้านล่าง
ตัวอย่าง
#include
using namespace std;
int binarySearch(int arr[], int p, int r, int num) {
if (p <= r) {
int mid = (p + r)/2;
if (arr[mid] == num)
return mid ;
if (arr[mid] > num)
return binarySearch(arr, p, mid-1, num);
if (arr[mid] < num)
return binarySearch(arr, mid+1, r, num);
}
return -1;
}
int main(void) {
int arr[] = {1, 3, 7, 15, 18, 20, 25, 33, 36, 40};
int n = sizeof(arr)/ sizeof(arr[0]);
int num;
cout << "Enter the number to search: \n";
cin >> num;
int index = binarySearch (arr, 0, n-1, num);
if(index == -1){
cout<< num <<" is not present in the array";
}else{
cout<< num <<" is present at index "<< index <<" in the array";
}
return 0;
} ผลลัพธ์
Enter the numberto search 20 20 is present at index 5 in the array
ในโปรแกรมข้างต้น binarySearch() เป็นฟังก์ชันแบบเรียกซ้ำที่ใช้เพื่อค้นหาองค์ประกอบที่จำเป็นในอาร์เรย์โดยใช้การค้นหาแบบไบนารี ฟังก์ชันนี้ใช้อาร์เรย์ ขอบเขตล่างและขอบเขตบน ตลอดจนจำนวนที่จะพบเป็นพารามิเตอร์ ดังแสดงด้านล่าง
int binarySearch(int arr[], int p, int r, int num)
จากนั้นจะคำนวณจุดกึ่งกลางของอาร์เรย์ หากค่าที่จุดกึ่งกลางเท่ากับ num ค่านั้นจะถูกส่งกลับ หากค่ามากกว่า num อาร์เรย์จะเรียกตัวเองซ้ำด้วยขอบเขตล่าง p และขอบเขตบนตอนกลาง -1 หากค่าน้อยกว่า num อาร์เรย์จะเรียกตัวเองซ้ำด้วยขอบเขตล่าง mid+1 และขอบเขตบน r สามารถดูได้จากข้อมูลโค้ดต่อไปนี้
int binarySearch(int arr[], int p, int r, int num) {
if (p <= r) {
int mid = (p + r)/2;
if (arr[mid] == num)
return mid ;
if (arr[mid] > num)
return binarySearch(arr, p, mid-1, num);
if (arr[mid] < num)
return binarySearch(arr, mid+1, r, num);
}
return -1;
} ในฟังก์ชัน main() จะมีการกำหนดอาร์เรย์ arr[] ขนาดของอาร์เรย์ถูกคำนวณและระบุจำนวนที่จะพบ จากนั้น binarySearch() จะถูกเรียกเพื่อค้นหาดัชนีของตัวเลข หากค่าที่ส่งคืนโดย binarySearch() คือ -1 แสดงว่าตัวเลขนั้นไม่อยู่ในอาร์เรย์ มิฉะนั้น ค่าดัชนีจะถูกส่งกลับ ด้านล่างนี้
int main(void) {
int arr[] = {1, 3, 7, 15, 18, 20, 25, 33, 36, 40};
int n = sizeof(arr)/ sizeof(arr[0]);
int num = 33;
int index = binarySearch (arr, 0, n-1, num);
if(index == -1)
cout<< num <<" is not present in the array";
else
cout<< num <<" is present at index "<< index <<" in the array";
return 0;
}