Online C Compiler
Buka di kompiler

Edisi pembelajaran bahasa Indonesia. Kode dan keluarannya tetap seperti aslinya.

Pencarian biner dalam C

Temukan nilai dalam array terurut dengan membagi rentang pencarian menjadi dua.

Buka di kompiler

Pencarian biner dalam C
Temukan nilai dalam array terurut dengan membagi rentang pencarian menjadi dua.

Pencarian biner memerlukan array terurut. Bandingkan target dengan elemen tengah. Jika target lebih kecil, buang bagian kanan; jika lebih besar, buang bagian kiri. Jika sama, kembalikan indeksnya.

Hitung titik tengah dengan low + (high - low) / 2 agar tidak menjumlahkan dua indeks besar. Saat memperbarui batas, keluarkan titik tengah yang sudah diperiksa. Jika low melebihi high, nilainya tidak ditemukan.

Versi iteratif menggunakan waktu O(log N) dan ruang tambahan O(1). Uji elemen pertama dan terakhir, target yang tidak ada, serta array satu elemen. Jika terdapat duplikat, hasilnya belum tentu kemunculan pertama.

Kode C

#include <stdio.h>

int binarySearch(int arr[], int size, int target) {
    int low = 0;
    int high = size - 1;

    while (low <= high) {
        // Prevent (low + high) integer overflow
        int mid = low + (high - low) / 2;

        if (arr[mid] == target) return mid;
        if (arr[mid] < target) low = mid + 1;
        else high = mid - 1;
    }
    return -1; // Target not found
}

int main() {
    int arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 23;
    int result = binarySearch(arr, n, target);

    if (result != -1)
        printf("Element %d found at index %d\n", target, result);
    else
        printf("Element %d not present\n", target);

    return 0;
}
Buka di kompiler

Keluaran yang diharapkan

Element 23 found at index 5

Pertanyaan umum

Mengapa kode dan keluarannya tetap dalam bahasa Inggris?

Kata kunci, pengenal, dan teks yang diperiksa tes dipertahankan agar program tidak berubah. Penjelasan dan kontrol telah diterjemahkan.