# LATIHAN MATERI 2
# NOMOR 1 (SeqSearch1)
seq_search1 <- function(data, x) {
i <- 1
n <- length(data)
while (i <= n && data[i] != x) {
cat("i =", i, "nilai =", data[i], "\n")
i <- i + 1
}
if (i <= n) {
cat("Ditemukan pada indeks:", i, "\n")
return(i)
} else {
cat("Data tidak ditemukan\n")
return(-1)
}
}
# NOMOR 1 (SeqSearch2)
seq_search2 <- function(data, x) {
arr <- c(data, x)
n <- length(data)
i <- 1
while (arr[i] != x) {
cat("i =", i, "nilai =", arr[i], "\n")
i <- i + 1
}
if (i <= n) {
cat("Ditemukan pada indeks:", i, "\n")
return(i)
} else {
cat("Data tidak ditemukan\n")
return(-1)
}
}
data <- c(7, 3, 9, 3, 5)
cat("SEQSEARCH1\n")
## SEQSEARCH1
seq_search1(data, 3)
## i = 1 nilai = 7
## Ditemukan pada indeks: 2
## [1] 2
seq_search1(data, 8)
## i = 1 nilai = 7
## i = 2 nilai = 3
## i = 3 nilai = 9
## i = 4 nilai = 3
## i = 5 nilai = 5
## Data tidak ditemukan
## [1] -1
cat("\nSEQSEARCH2\n")
##
## SEQSEARCH2
seq_search2(data, 3)
## i = 1 nilai = 7
## Ditemukan pada indeks: 2
## [1] 2
seq_search2(data, 8)
## i = 1 nilai = 7
## i = 2 nilai = 3
## i = 3 nilai = 9
## i = 4 nilai = 3
## i = 5 nilai = 5
## Data tidak ditemukan
## [1] -1
# NOMOR 3 (BinSearch1)
bin_search1 <- function(data, x) {
low <- 1
high <- length(data)
while (low <= high) {
mid <- floor((low + high) / 2)
cat("low =", low, "mid =", mid,
"high =", high, "\n")
if (data[mid] == x) {
cat("Data ditemukan!\n")
return(mid)
} else if (data[mid] < x) {
low <- mid + 1
} else {
high <- mid - 1
}
}
cat("Data tidak ditemukan\n")
return(-1)
}
# NOMOR 3 (BinSearch2)
bin_search2 <- function(data, x, low, high) {
if (low > high) {
return(-1)
}
mid <- floor((low + high) / 2)
cat("mid =", mid, "nilai =", data[mid], "\n")
if (data[mid] == x) {
return(mid)
} else if (data[mid] < x) {
return(bin_search2(data, x, mid + 1, high))
} else {
return(bin_search2(data, x, low, mid - 1))
}
}
data <- c(2, 5, 8, 12, 16, 23, 38, 56, 72, 91)
cat("BINSEARCH1\n")
## BINSEARCH1
print(bin_search1(data, 23))
## low = 1 mid = 5 high = 10
## low = 6 mid = 8 high = 10
## low = 6 mid = 6 high = 7
## Data ditemukan!
## [1] 6
print(bin_search1(data, 6))
## low = 1 mid = 5 high = 10
## low = 1 mid = 2 high = 4
## low = 3 mid = 3 high = 4
## Data tidak ditemukan
## [1] -1
cat("\nBINSEARCH2\n")
##
## BINSEARCH2
print(bin_search2(data, 23, 1, length(data)))
## mid = 5 nilai = 16
## mid = 8 nilai = 56
## mid = 6 nilai = 23
## [1] 6
print(bin_search2(data, 6, 1, length(data)))
## mid = 5 nilai = 16
## mid = 2 nilai = 5
## mid = 3 nilai = 8
## [1] -1
# NOMOR 4
binary_search_desc <- function(data, x) {
low <- 1
high <- length(data)
while (low <= high) {
mid <- floor((low + high) / 2)
if (data[mid] == x) {
return(mid)
} else if (data[mid] < x) {
high <- mid - 1
} else {
low <- mid + 1
}
}
return(-1)
}
data <- c(91, 72, 56, 38, 23, 16, 12, 8, 5, 2)
print(binary_search_desc(data, 23))
## [1] 5
print(binary_search_desc(data, 6))
## [1] -1
# NOMOR 7
n <- 1000000
maksimum <- ceiling(log2(n+1))
cat ("Jumlah Data:", n, "\n")
## Jumlah Data: 1e+06
cat ("Maksimum Perbandingan:", maksimum, "\n")
## Maksimum Perbandingan: 20