Bagikan melalui


bsearch

Melakukan pencarian biner dari array yang diurutkan. Versi fungsi ini yang lebih aman tersedia; lihat bsearch_s.

Sintaks

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

Parameter

key
Arahkan ke kunci untuk dicari.

base
Penunjuk ke dasar data pencarian.

number
Jumlah elemen.

width
Lebar elemen.

compare
Fungsi panggilan balik yang membandingkan dua elemen. Yang pertama adalah penunjuk ke kunci untuk pencarian, dan yang kedua adalah penunjuk ke elemen array yang akan dibandingkan dengan kunci.

Nilai hasil

bsearch mengembalikan penunjuk ke kemunculan key dalam array yang ditujukkan oleh base. Jika key tidak ditemukan, fungsi mengembalikan NULL. Jika array tidak dalam urutan urutan naik atau berisi rekaman duplikat dengan kunci yang identik, hasilnya tidak dapat diprediksi.

Keterangan

Fungsi ini bsearch melakukan pencarian biner dari array number elemen yang diurutkan, masing-masing width byte dalam ukuran. Nilai base adalah penunjuk ke dasar array yang akan dicari, dan key merupakan nilai yang sedang dicari. Parameter compare adalah penunjuk ke rutinitas yang disediakan pengguna yang membandingkan kunci yang diminta dengan elemen array. Ini mengembalikan salah satu nilai berikut yang menentukan hubungannya:

Nilai yang dikembalikan oleh compare rutinitas Deskripsi
< 0 Kunci kurang dari elemen array.
0 Kunci sama dengan elemen array.
> 0 Kunci lebih besar dari elemen array.

Fungsi ini memvalidasi parameternya. Jika compare, key atau number , NULLatau , atau jika base adalah NULL dan number bukan nol, atau jika width nol, fungsi memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, errno diatur ke EINVAL dan fungsi mengembalikan NULL.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan
bsearch <stdlib.h> dan <search.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

Program ini mengurutkan array string dengan qsort, lalu menggunakan bsearch untuk menemukan kata "kucing".

// 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" );
}
cat cow dog goat horse human pig rat
cat found at 002F0F04

Baca juga

Mencari dan mengurutkan
_lfind
_lsearch
qsort