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

Làm thế nào để tìm phần tử tối thiểu trong một mảng bằng cách sử dụng tìm kiếm nhị phân trong ngôn ngữ C?

Ngôn ngữ lập trình C cung cấp hai loại kỹ thuật tìm kiếm. Chúng như sau -

  • Tìm kiếm tuyến tính
  • Tìm kiếm nhị phân

Tìm kiếm nhị phân

  • Phương pháp này chỉ có thể được áp dụng cho danh sách đã sắp xếp.
  • Danh sách đã cho được chia thành hai phần bằng nhau.
  • Khóa đã cho được so sánh với phần tử ở giữa của danh sách.

Ở đây, ba tình huống có thể xảy ra, như sau -

  • Nếu phần tử ở giữa khớp với khóa, thì quá trình tìm kiếm sẽ kết thúc thành công tại đây

  • Nếu phần tử ở giữa lớn hơn khóa, thì quá trình tìm kiếm sẽ được tiến hành ở phân vùng bên trái.

  • Nếu phần tử ở giữa thấp hơn khóa, thì quá trình tìm kiếm sẽ được tiến hành trong phân vùng bên phải.

Đầu vào (i / p) - Danh sách các phần tử, khóa chưa được sắp xếp.

Đầu ra (o / p) -

  • Thành công - Nếu tìm thấy chìa khóa
  • Không thành công - Nếu không

Làm thế nào để tìm phần tử tối thiểu trong một mảng bằng cách sử dụng tìm kiếm nhị phân trong ngôn ngữ C?

key = 20
mid = (low +high) /2

Làm thế nào để tìm phần tử tối thiểu trong một mảng bằng cách sử dụng tìm kiếm nhị phân trong ngôn ngữ C?

Chương trình1

Sau đây là chương trình C để tìm phần tử nhỏ nhất trong một mảng bằng cách sử dụng tìm kiếm nhị phân -

#include<stdio.h>
int main(){
   int a[50], n, i, key, flag = 0, low, mid, high;
   printf("enter the no: of elements:");
   scanf ("%d",&n);
   printf("enter the elements:");
   for(i=0; i<n; i++)
      scanf( "%d", &a[i]);
   printf("enter a key element:");
   scanf ("%d", &key);
   low = 0;
   high = n-1;
   while (low<= high ){
      mid = (low + high) /2;
      if (a[mid] == key){
         flag = 1;
         break;
      }
      else{
         if (a[mid] > key)
            high = mid-1;
         else
            low = mid+1;
      }
   }
   if (flag == 1)
      printf ("search is successful");
   else
      printf("search is unsuccessful");
   return 0;
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Run 1:
enter the no: of elements:5
enter the elements:
12
34
11
56
67
enter a key element:45
search is unsuccessful
Run 2:
enter the no: of elements:3
enter the elements:
12
34
56
enter a key element:34
search is successful

Chương trình 2

Dưới đây là một chương trình C khác để tìm phần tử nhỏ nhất trong một mảng bằng cách sử dụng tìm kiếm nhị phân -

#include<stdio.h>
void Bmin(int *a, int i, int n){
   int j, temp;
   temp = a[i];
   j = 2 * i;
   while (j <= n){
      if (j < n && a[j+1] > a[j])
         j = j + 1;
      if (temp < a[j])
         break;
      else if (temp >= a[j]){
         a[j / 2] = a[j];
         j = 2 * j;
      }
   }
   a[j/2] = temp;
   return;
}
int binarysearchmin(int *a,int n){
   int i;
   for(i = n/2; i >= 1; i--){
      Bmin(a,i,n);
   }
   return a[1];
}
int main(){
   int n, i, x, min;
   int a[20];
   printf("Enter no of elements in an array\n");
   scanf("%d", &n);
   printf("\nEnter %d elements: ", n);
   for (i = 1; i <= n; i++){
      scanf("%d", &a[i]);
   }
   min = binarysearchmin(a, n);
   printf("\minimum element in an array is : %d", min);
   return 0;
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter no of elements in an array
5
Enter 5 elements:
12
23
34
45
56
minimum element in an array is: 12