# LATIHAN MATERI 3
# NOMOR 1
# NOMOR 1 (Seleksi Maksimum)
selection_max <- function(data) {
  arr <- data
  n <- length(arr)
  for (i in 1:(n - 1)) {
    max_idx <- i
    for (j in (i + 1):n) {
      if (arr[j] > arr[max_idx]) {
        max_idx <- j
      }
    }
    temp <- arr[i]
    arr[i] <- arr[max_idx]
    arr[max_idx] <- temp
    cat("Pass", i, ":", arr, "\n")
  }
  return(arr)
}

# NOMOR 1 (Seleksi Minimum)
selection_min <- function(data) {
  arr <- data
  n <- length(arr)
  for (i in 1:(n - 1)) {
    min_idx <- i
    for (j in (i + 1):n) {
      if (arr[j] < arr[min_idx]) {
        min_idx <- j
      }
    }
    temp <- arr[i]
    arr[i] <- arr[min_idx]
    arr[min_idx] <- temp
    cat("Pass", i, ":", arr, "\n")
  }
  return(arr)
}

data <- c(25, 22, 18, 20, 15)
cat("SELECTION MAXIMUM\n")
## SELECTION MAXIMUM
print(selection_max(data))
## Pass 1 : 25 22 18 20 15 
## Pass 2 : 25 22 18 20 15 
## Pass 3 : 25 22 20 18 15 
## Pass 4 : 25 22 20 18 15 
## [1] 25 22 20 18 15
cat("\nSELECTION MINIMUM\n")
## 
## SELECTION MINIMUM
print(selection_min(data))
## Pass 1 : 15 22 18 20 25 
## Pass 2 : 15 18 22 20 25 
## Pass 3 : 15 18 20 22 25 
## Pass 4 : 15 18 20 22 25 
## [1] 15 18 20 22 25
# NOMOR 2
insertion_sort <- function(data) {
  arr <- data
  n <- length(arr)
  perbandingan <- 0
  pergeseran <- 0
  for (i in 2:n) {
    key <- arr[i]
    j <- i - 1
    while (j >= 1) {
      perbandingan <- perbandingan + 1
      if (arr[j] > key) {
        arr[j + 1] <- arr[j]
        pergeseran <- pergeseran + 1
        j <- j - 1
      } else {
        break
      }
    }
    arr[j + 1] <- key
    cat("Pass", i - 1, ":", arr, "\n")
  }
  cat("Hasil:", arr, "\n")
  cat("Perbandingan:", perbandingan, "\n")
  cat("Pergeseran:", pergeseran, "\n")
  return(arr)
}
cat("DATA PERTAMA\n")
## DATA PERTAMA
insertion_sort(c(5, 4, 3, 2, 1))
## Pass 1 : 4 5 3 2 1 
## Pass 2 : 3 4 5 2 1 
## Pass 3 : 2 3 4 5 1 
## Pass 4 : 1 2 3 4 5 
## Hasil: 1 2 3 4 5 
## Perbandingan: 10 
## Pergeseran: 10
## [1] 1 2 3 4 5
cat("\nDATA KEDUA\n")
## 
## DATA KEDUA
insertion_sort(c(1, 2, 3, 5, 4))
## Pass 1 : 1 2 3 5 4 
## Pass 2 : 1 2 3 5 4 
## Pass 3 : 1 2 3 5 4 
## Pass 4 : 1 2 3 4 5 
## Hasil: 1 2 3 4 5 
## Perbandingan: 5 
## Pergeseran: 1
## [1] 1 2 3 4 5
# NOMOR 3
selection_sort_record <- function(data) {
  arr <- data
  n <- nrow(arr)
  for (i in 1:(n - 1)) {
    min_idx <- i
    for (j in (i + 1):n) {
      if (arr$nilai[j] < arr$nilai[min_idx]) {
        min_idx <- j
      }
    }
    temp <- arr[i, ]
    arr[i, ] <- arr[min_idx, ]
    arr[min_idx, ] <- temp
  }
  return(arr)
}

data <- data.frame(
  nama = c("Adey", "Dian", "Dean"),
  nilai = c(2, 2, 1)
)
print("Sebelum:")
## [1] "Sebelum:"
print(data)
##   nama nilai
## 1 Adey     2
## 2 Dian     2
## 3 Dean     1
print("Sesudah:")
## [1] "Sesudah:"
print(selection_sort_record(data))
##   nama nilai
## 1 Dean     1
## 2 Dian     2
## 3 Adey     2