Computer >> Máy Tính >  >> Lập trình >> lập trình C

Tìm kiếm nhị phân (đệ quy và lặp lại) trong chương trình C


Tìm kiếm nhị phân là một thuật toán tìm kiếm được sử dụng để tìm vị trí của một phần tử (giá trị đích) trong một mảng được sắp xếp. Mảng phải được sắp xếp trước khi áp dụng tìm kiếm nhị phân.

Tìm kiếm nhị phân còn được gọi bằng những cái tên này, tìm kiếm logarit, tìm kiếm nhị phân, tìm kiếm nửa khoảng.

Đang làm việc

Thuật toán tìm kiếm nhị phân hoạt động bằng cách so sánh phần tử được tìm kiếm với phần tử ở giữa của mảng và dựa trên sự so sánh này theo quy trình bắt buộc.

Trường hợp 1 - element =middle, phần tử được tìm thấy trả về chỉ mục.

Trường hợp 2 - element> middle, tìm kiếm phần tử trong mảng con bắt đầu từ giữa + 1 index đến n.

Trường hợp 3 - element

THUẬT TOÁN

Thông số inital_value, end_value

Step 1 : Find the middle element of array. using ,
middle = initial_value + end_value / 2 ;
Step 2 : If middle = element, return ‘element found’ and index.
Step 3 : if middle > element, call the function with end_value = middle - 1 .
Step 4 : if middle < element, call the function with start_value = middle + 1 .
Step 5 : exit.

Việc triển khai hàm thuật toán tìm kiếm nhị phân sử dụng lệnh gọi hàm lặp đi lặp lại. Cuộc gọi này có thể có hai loại -

  • Lặp lại
  • Đệ quy

Cuộc gọi lặp đi lặp lại đang lặp lại trên cùng một khối mã nhiều lần]

Cuộc gọi đệ quy đang gọi đi gọi lại cùng một hàm.

CHƯƠNG TRÌNH THỰC HIỆN TÌM KIẾM BINARY DÙNG CUỘC GỌI ITERATIVE

Ví dụ

#include <stdio.h>
int iterativeBinarySearch(int array[], int start_index, int end_index, int element){
   while (start_index <= end_index){
      int middle = start_index + (end_index- start_index )/2;
      if (array[middle] == element)
         return middle;
      if (array[middle] < element)
         start_index = middle + 1;
      else
         end_index = middle - 1;
   }
   return -1;
}
int main(void){
   int array[] = {1, 4, 7, 9, 16, 56, 70};
   int n = 7;
   int element = 16;
   int found_index = iterativeBinarySearch(array, 0, n-1, element);
   if(found_index == -1 ) {
      printf("Element not found in the array ");
   }
   else {
      printf("Element found at index : %d",found_index);
   }
   return 0;
}

Đầu ra

Element found at index : 4

CHƯƠNG TRÌNH THỰC HIỆN TÌM KIẾM BINARY DÙNG NHẬN CUỘC GỌI

Ví dụ

#include <stdio.h>
int recursiveBinarySearch(int array[], int start_index, int end_index, int element){
   if (end_index >= start_index){
      int middle = start_index + (end_index - start_index )/2;
      if (array[middle] == element)
         return middle;
      if (array[middle] > element)
         return recursiveBinarySearch(array, start_index, middle-1, element);
      return recursiveBinarySearch(array, middle+1, end_index, element);
   }
   return -1;
}
int main(void){
   int array[] = {1, 4, 7, 9, 16, 56, 70};
   int n = 7;
   int element = 9;
   int found_index = recursiveBinarySearch(array, 0, n-1, element);
   if(found_index == -1 ) {
      printf("Element not found in the array ");
   }
   else {
      printf("Element found at index : %d",found_index);
   }
   return 0;
}

Đầu ra

Element found at index : 3