produk <- data.frame( kode = c(101, 103, 105, 106, 108, 110), nama = c(“Buku”, “Pensil”, “Pulpen”, “Penghapus”, “Tas”, “Penggaris”), harga = c(15000, 2000, 3000, 1000, 75000, 5000) )
seq_tanpa_boolean <- function(data, target) { for (i in seq_along(data)) { if (data[i] == target) { return(i) } } return(NA) }
bin_tanpa_boolean <- function(data, target) { kiri <- 1 kanan <- length(data)
while (kiri <= kanan) { tengah <- floor((kiri + kanan) / 2)
if (data[tengah] == target) {
return(tengah)
} else if (data[tengah] < target) {
kiri <- tengah + 1
} else {
kanan <- tengah - 1
}
} return(NA) }
bin_boolean <- function(data, target) { posisi <- bin_tanpa_boolean(data, target) return(!is.na(posisi)) }
target_kode <- 106
pos_asli <- seq_tanpa_boolean(produk$kode, target_kode)
if (!is.na(pos_asli)) { print(produk[pos_asli, , drop = FALSE]) }
urutan <- order(produk$kode) produk_urut <- produk[urutan, , drop = FALSE]
pos_urut <- bin_tanpa_boolean(produk_urut$kode, target_kode)
if (!is.na(pos_urut)) { baris_asli <- urutan[pos_urut] print(c(posisi_terurut = pos_urut, baris_asli = baris_asli)) print(produk_urut[pos_urut, , drop = FALSE]) }
target_tidak_ada <- bin_boolean(produk_urut$kode, 999)
if (!target_tidak_ada) { print(“Kode 999 tidak ditemukan”) } else { print(“Kode 999 ditemukan”) }
print(match(target_kode, produk\(kode)) print(target_kode %in% produk\)kode) print(which(produk$kode == target_kode))