# 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