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
, NULL
atau , 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk