selection_maks <- function(A) {
n <- length(A)
for (i in 1:(n-1)) {
imaks <- i
for (j in (i+1):n) {
if (A[j] > A[imaks]) {
imaks <- j
}
}
temp <- A[i]
A[i] <- A[imaks]
A[imaks] <- temp
print(A)
}
return(A)
}
A <- c(25, 22, 18, 20, 15)
selection_maks(A)
## [1] 25 22 18 20 15
## [1] 25 22 18 20 15
## [1] 25 22 20 18 15
## [1] 25 22 20 18 15
## [1] 25 22 20 18 15
binary_insertion_sort <- function(A) {
n <- length(A)
for (i in 2:n) {
y <- A[i]
kiri <- 1
kanan <- i
# Mencari posisi sisip
while (kiri < kanan) {
tengah <- (kiri + kanan) %/% 2
if (A[tengah] <= y) {
kiri <- tengah + 1
} else {
kanan <- tengah
}
}
# Menggeser elemen
j <- i
while (j > kiri) {
A[j] <- A[j-1]
j <- j - 1
}
A[kiri] <- y
}
return(A)
}
A <- c(5, 2, 4, 1, 3)
print(binary_insertion_sort(A))
## [1] 1 2 3 4 5
# Latihan Materi 3 Nomor 5 ----
# Selection Sort dan Insertion Sort
# Data EuStockMarkets
# 1. Mengambil 50 data CAC pertama
data("EuStockMarkets")
cac <- EuStockMarkets[1:50, "CAC"]
print("Data CAC sebelum diurutkan:")
## [1] "Data CAC sebelum diurutkan:"
print(cac)
## [1] 1772.8 1750.5 1718.0 1708.1 1723.1 1714.3 1734.5 1757.4 1754.0 1754.3
## [11] 1759.8 1755.5 1758.1 1757.5 1763.5 1762.8 1768.9 1778.1 1780.1 1767.7
## [21] 1757.9 1756.6 1754.7 1766.8 1766.5 1762.2 1759.5 1782.4 1789.5 1783.5
## [31] 1780.4 1808.8 1820.3 1820.3 1820.3 1687.5 1725.6 1792.9 1819.1 1833.5
## [41] 1853.4 1849.7 1851.8 1857.7 1864.3 1863.5 1873.2 1860.8 1868.7 1860.4
# 2. Fungsi Selection Sort (Menurun)
selection_sort <- function(x) {
n <- length(x)
perbandingan <- 0
pertukaran <- 0
for (i in 1:(n - 1)) {
indeks_max <- i
for (j in (i + 1):n) {
perbandingan <- perbandingan + 1
if (x[j] > x[indeks_max]) {
indeks_max <- j
}
}
if (indeks_max != i) {
temp <- x[i]
x[i] <- x[indeks_max]
x[indeks_max] <- temp
pertukaran <- pertukaran + 1
}
}
list(
hasil = x,
perbandingan = perbandingan,
pertukaran = pertukaran
)
}
# 3. Fungsi Insertion Sort (Menurun)
insertion_sort <- function(x) {
n <- length(x)
perbandingan <- 0
pergeseran <- 0
for (i in 2:n) {
key <- x[i]
j <- i - 1
while (j >= 1) {
perbandingan <- perbandingan + 1
if (x[j] < key) {
x[j + 1] <- x[j]
pergeseran <- pergeseran + 1
j <- j - 1
} else {
break
}
}
x[j + 1] <- key
}
list(
hasil = x,
perbandingan = perbandingan,
pergeseran = pergeseran
)
}
# 4. Menjalankan Selection Sort
hasil_selection <- selection_sort(cac)
cat("\nHasil Selection Sort:\n")
##
## Hasil Selection Sort:
print(hasil_selection$hasil)
## [1] 1873.2 1868.7 1864.3 1863.5 1860.8 1860.4 1857.7 1853.4 1851.8 1849.7
## [11] 1833.5 1820.3 1820.3 1820.3 1819.1 1808.8 1792.9 1789.5 1783.5 1782.4
## [21] 1780.4 1780.1 1778.1 1772.8 1768.9 1767.7 1766.8 1766.5 1763.5 1762.8
## [31] 1762.2 1759.8 1759.5 1758.1 1757.9 1757.5 1757.4 1756.6 1755.5 1754.7
## [41] 1754.3 1754.0 1750.5 1734.5 1725.6 1723.1 1718.0 1714.3 1708.1 1687.5
cat("Jumlah perbandingan:",
hasil_selection$perbandingan, "\n")
## Jumlah perbandingan: 1225
cat("Jumlah pertukaran:",
hasil_selection$pertukaran, "\n")
## Jumlah pertukaran: 47
# 5. Menjalankan Insertion Sort
hasil_insertion <- insertion_sort(cac)
cat("\nHasil Insertion Sort:\n")
##
## Hasil Insertion Sort:
print(hasil_insertion$hasil)
## [1] 1873.2 1868.7 1864.3 1863.5 1860.8 1860.4 1857.7 1853.4 1851.8 1849.7
## [11] 1833.5 1820.3 1820.3 1820.3 1819.1 1808.8 1792.9 1789.5 1783.5 1782.4
## [21] 1780.4 1780.1 1778.1 1772.8 1768.9 1767.7 1766.8 1766.5 1763.5 1762.8
## [31] 1762.2 1759.8 1759.5 1758.1 1757.9 1757.5 1757.4 1756.6 1755.5 1754.7
## [41] 1754.3 1754.0 1750.5 1734.5 1725.6 1723.1 1718.0 1714.3 1708.1 1687.5
cat("Jumlah perbandingan:",
hasil_insertion$perbandingan, "\n")
## Jumlah perbandingan: 1069
cat("Jumlah pergeseran:",
hasil_insertion$pergeseran, "\n")
## Jumlah pergeseran: 1031
# 6. Membandingkan hasil kedua algoritma
perbandingan_algoritma <- data.frame(
Algoritma = c("Selection Sort", "Insertion Sort"),
Perbandingan = c(
hasil_selection$perbandingan,
hasil_insertion$perbandingan
),
Pertukaran_Pergeseran = c(
hasil_selection$pertukaran,
hasil_insertion$pergeseran
)
)
cat("\nTabel Perbandingan Operasi:\n")
##
## Tabel Perbandingan Operasi:
print(perbandingan_algoritma)
## Algoritma Perbandingan Pertukaran_Pergeseran
## 1 Selection Sort 1225 47
## 2 Insertion Sort 1069 1031
# 7. Memeriksa apakah hasil pengurutan sama
cat("\nApakah hasil kedua algoritma sama?\n")
##
## Apakah hasil kedua algoritma sama?
print(identical(
hasil_selection$hasil,
hasil_insertion$hasil
))
## [1] TRUE