Sdílet prostřednictvím


bsearch

Provádí binární hledání seřazené pole.Bezpečnější verze této funkce je k dispozici. see bsearch_s.

void *bsearch( 
   const void *key,
   const void *base,
   size_t num,
   size_t width,
   int ( __cdecl *compare ) (const void *key, const void *datum) 
);

Parametry

  • key
    Objekt, který chcete vyhledat.

  • base
    Ukazatel na základní vyhledávání údajů.

  • num
    Počet prvků.

  • width
    Šířka prvky.

  • compare
    Funkce zpětného volání, který porovnává dva prvky.První je ukazatel na klíč pro vyhledávání a druhý je ukazatel na prvek pole porovnat s klíči.

Vrácená hodnota

bsearchvrací ukazatel na výskyt key v poli, na kterou odkazuje base.Pokud key nebyl nalezen, vrátí funkce NULL.Pokud pole není ve vzestupném pořadí řazení nebo stejné klíče obsahuje duplicitní záznamy, výsledkem nepředvídatelné.

Poznámky

bsearch Funkce provádí binární hledání seřazené pole z num prvky, každý z width bajty.base Hodnota je ukazatel na základ pole, které mají být prohledány a key je předložena žádost o hodnotu.compare Je parametr ukazatel na uživatelem zadaný rutina, která porovná klíč požadovaného prvku pole a vrátí jednu z následujících hodnot určujících jejich vztah:

Hodnotu vrácenou compare rutina

Description

< 0

Klíč je menší než prvek pole.

0

Klíč je prvek pole.

> 0

Klíč je větší než prvek pole.

Tato funkce ověřuje své parametry.Pokud compare, key nebo num je NULL, nebo -li base je NULL a *num je nenulová, nebo pokud width je nula, vyvolán neplatný parametr obslužné rutiny, jak je popsáno v Ověření parametru.Pokud smí provádění pokračovat, errno se nastaví na EINVAL a funkce vrátí NULL.

Požadavky

Rutina

Požadované záhlaví

bsearch

<stdlib.h> a <search.h>

Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.

Příklad

Tento program řazení qsort pole řetězců a potom použije bsearch vyhledejte slovo "kočka".

// crt_bsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( char **arg1, char **arg2 )
{
   /* Compare all of both strings: */
   return _strcmpi( *arg1, *arg2 );
}

int main( void )
{
   char *arr[] = {"dog", "pig", "horse", "cat", "human", "rat", "cow", "goat"};
   char **result;
   char *key = "cat";
   int i;

   /* Sort using Quicksort algorithm: */
   qsort( (void *)arr, sizeof(arr)/sizeof(arr[0]), sizeof( char * ), (int (*)(const 
   void*, const void*))compare );

   for( i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i )    /* Output sorted list */
      printf( "%s ", arr[i] );

   /* Find the word "cat" using a binary search algorithm: */
   result = (char **)bsearch( (char *) &key, (char *)arr, sizeof(arr)/sizeof(arr[0]),
                              sizeof( char * ), (int (*)(const void*, const void*))compare );
   if( result )
      printf( "\n%s found at %Fp\n", *result, result );
   else
      printf( "\nCat not found!\n" );
}
  

Ekvivalent v rozhraní .NET Framework

System::Collections::ArrayList::BinarySearch

Viz také

Referenční dokumentace

Vyhledávání a třídění

_lfind

_lsearch

qsort