# 1. DEFINISI FUNGSI PENCARIAN (Tambahan yang kurang) ----
# Sequential Search (tanpa flag boolean)
seq_tanpa_boolean <- function(x, target) {
for (i in seq_along(x)) {
if (x[i] == target) {
return(i) # Langsung return posisi jika ketemu
}
}
return(NA) # Return NA jika tidak ditemukan
}
# Binary Search (tanpa flag boolean) - Data harus terurut!
bin_tanpa_boolean <- function(x, target) {
kiri <- 1
kanan <- length(x)
while (kiri <= kanan) {
tengah <- (kiri + kanan) %/% 2
if (x[tengah] == target) {
return(tengah) # Langsung return posisi
} else if (x[tengah] < target) {
kiri <- tengah + 1
} else {
kanan <- tengah - 1
}
}
return(NA)
}
# Binary Search (menggunakan flag boolean)
bin_boolean <- function(x, target) {
kiri <- 1
kanan <- length(x)
ditemukan <- FALSE
posisi <- NA
while (kiri <= kanan && !ditemukan) {
tengah <- (kiri + kanan) %/% 2
if (x[tengah] == target) {
ditemukan <- TRUE
posisi <- tengah
} else if (x[tengah] < target) {
kiri <- tengah + 1
} else {
kanan <- tengah - 1
}
}
return(posisi)
}
# 2. STUDI KASUS PENCARIAN KODE PRODUK (Kode Anda) ----
# Studi kasus pencarian kode produk simulasi ----
produk <- data.frame(
kode = c(104, 101, 107, 103, 106, 102, 105),
nama = c("Telur", "Beras", "Kopi", "Minyak",
"Garam", "Gula", "Tepung"),
stok = c(25, 40, 18, 30, 50, 35, 28)
)
target_kode <- 106
pos_asli <- seq_tanpa_boolean(produk$kode, target_kode)
if (!is.na(pos_asli)) print(produk[pos_asli, , drop = FALSE])
## kode nama stok
## 5 106 Garam 50
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])
}
## posisi_terurut baris_asli
## 6 5
## kode nama stok
## 5 106 Garam 50
target_tidak_ada <- bin_boolean(produk_urut$kode, 999)
if (is.na(target_tidak_ada)) print("Kode 999 tidak ditemukan")
## [1] "Kode 999 tidak ditemukan"
print(match(target_kode, produk$kode))
## [1] 5
print(target_kode %in% produk$kode)
## [1] TRUE
print(which(produk$kode == target_kode))
## [1] 5