C 庫 - bsearch() 函式



C 的stdlibbsearch() 函式對已排序的陣列執行二分查詢。它用於在陣列中查詢特定元素。此函式搜尋由 base 指向的 n 個物件的陣列。它查詢與 key 指向的物件匹配的元素。

二分查詢是一種搜尋演算法,用於在已排序的陣列中查詢目標值的位置。

語法

以下是 bsearch() 函式的 C 庫語法:

void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))

引數

此函式接受以下引數:

  • key - 它表示需要搜尋的元素的指標。

  • base - 它表示陣列第一個元素的指標。

  • nitems - 它表示陣列中的元素數量。

  • size - 它表示陣列中每個元素的大小。

  • compare - 它表示一個比較兩個元素的函式。

返回值

此函式返回指向陣列中匹配元素的指標。否則,它返回 NULL 指標。

示例 1

在此示例中,我們建立一個基本的 C 程式來演示 bsearch() 函式的使用。

#include <stdio.h>
#include <stdlib.h>
int compare(const void * a, const void * b) {
   return ( *(int*)a - *(int*)b );
}
// main function
int main () {
   int values[] = { 5, 20, 10, 30, 40 };
   int *item;
   int key = 30;

   /* using bsearch() to find value 30 in the array */
   item = (int*) bsearch (&key, values, 5, sizeof (int), compare);
   if( item != NULL ) {
      printf("Found item = %d\n", *item);
   } 
   else {
      printf("Item = %d could not be found\n", *item);
   }   
   return(0);
}

輸出

以下是輸出:

Found item = 30

示例 2

下面的 C 程式使用 bsearch() 函式在已排序的陣列中搜索字元。

#include <stdio.h>
#include <stdlib.h>

// Comparison function
int comfunc(const void* a, const void* b) {
   return (*(char*)a - *(char*)b);
}
// main function
int main() {
   // sorted array
   char arr[] = {'a', 'b', 'c', 'd', 'e'};
   int n = sizeof(arr) / sizeof(arr[0]);

   // searching key
   char key = 'c';

   // using bsearch()
   char* item = (char*)bsearch(&key, arr, n, sizeof(char), comfunc);

   // If the key is found, print its value and index
   if (item != NULL) {
      printf("'%c' Found at index %ld\n", *item, item - arr);
   }
   else {
      printf("Character '%c' is not found\n", key);
   }
   return 0;
}

輸出

以下是輸出:

'c' Found at index 2

示例 3

以下是一個示例,我們建立了一個 C 程式來使用 bsearch() 函式在已排序的陣列中搜索字串。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Comparison function
int comfunc(const void* a, const void* b) {
   return strcmp(*(const char**)a, *(const char**)b);
}
// main function
int main() {
   // Sorted array of strings
   const char* arr[] = {"Aman", "Shriansh", "Tapas", "Vivek"};
   int n = sizeof(arr) / sizeof(arr[0]);

   // Searching key
   const char* key = "Aman";

   // Using bsearch()
   const char** item;
   item = (const char**)bsearch(&key, arr, n, sizeof(const char*), comfunc);

   // If the key is found, print its value and index
   if (item != NULL) {
      printf("'%s' Found at index %ld\n", *item, item - arr);
   } 
   else {
      printf("Name '%s' is not found\n", key);
   }
   return 0;
}

輸出

以下是輸出:

'Aman' Found at index 0
廣告