#1.Larik setelah setelah setiap pass.
data <- c(25, 22, 18, 20, 15)
n <- length(data)
for (i in 1:(n-1)) {
max_idx <- i
for (j in (i+1):n) {
if (data[j] > data[max_idx]) {
max_idx <- j
}
}
temp <- data[i]
data[i] <- data[max_idx]
data[max_idx] <- temp
cat("Pass", i, ":")
print(data)
}
## Pass 1 :[1] 25 22 18 20 15
## Pass 2 :[1] 25 22 18 20 15
## Pass 3 :[1] 25 22 20 18 15
## Pass 4 :[1] 25 22 20 18 15
data <- c(25, 22, 18, 20, 15)
n <- length(data)
for (i in n:2) {
min_idx <- 1
for (j in 2:i) {
if (data[j] < data[min_idx]) {
min_idx <- j
}
}
temp <- data[i]
data[i] <- data[min_idx]
data[min_idx] <- temp
cat("Pass", n-i+1, ":")
print(data)
}
## Pass 1 :[1] 25 22 18 20 15
## Pass 2 :[1] 25 22 20 18 15
## Pass 3 :[1] 25 22 20 18 15
## Pass 4 :[1] 25 22 20 18 15
#2.Hitung banyak perbandingan dan pergeseran.
insertion_sort <- function(data) {
n <- length(data)
perbandingan <- 0
pergeseran <- 0
for (i in 2:n) {
key <- data[i]
j <- i - 1
while (j >= 1) {
perbandingan <- perbandingan + 1
if (data[j] > key) {
data[j+1] <- data[j]
pergeseran <- pergeseran + 1
j <- j - 1
} else {
break
}
}
data[j+1] <- key
cat("Pass", i-1, ":")
print(data)
}
cat("Hasil akhir:", data, "\n")
cat("Jumlah perbandingan:", perbandingan, "\n")
cat("Jumlah pergeseran:", pergeseran, "\n")
}
# Data pertama
cat("DATA PERTAMA\n")
## DATA PERTAMA
insertion_sort(c(5, 4, 3, 2, 1))
## Pass 1 :[1] 4 5 3 2 1
## Pass 2 :[1] 3 4 5 2 1
## Pass 3 :[1] 2 3 4 5 1
## Pass 4 :[1] 1 2 3 4 5
## Hasil akhir: 1 2 3 4 5
## Jumlah perbandingan: 10
## Jumlah pergeseran: 10
# Data kedua
cat("\nDATA KEDUA\n")
##
## DATA KEDUA
insertion_sort(c(1, 2, 3, 5, 4))
## Pass 1 :[1] 1 2 3 5 4
## Pass 2 :[1] 1 2 3 5 4
## Pass 3 :[1] 1 2 3 5 4
## Pass 4 :[1] 1 2 3 4 5
## Hasil akhir: 1 2 3 4 5
## Jumlah perbandingan: 5
## Jumlah pergeseran: 1
#3.urutan relatif elemen yang bernilai sama
data <- data.frame(
nama = c("Ani", "Budi", "Citra"),
nilai = c(5, 5, 3)
)
print(data)
## nama nilai
## 1 Ani 5
## 2 Budi 5
## 3 Citra 3
n <- nrow(data)
for (i in 1:(n-1)) {
min_idx <- i
for (j in (i+1):n) {
if (data$nilai[j] < data$nilai[min_idx]) {
min_idx <- j
}
}
temp <- data[i, ]
data[i, ] <- data[min_idx, ]
data[min_idx, ] <- temp
}
cat("Hasil Selection Sort:\n")
## Hasil Selection Sort:
print(data)
## nama nilai
## 1 Citra 3
## 2 Budi 5
## 3 Ani 5
#4.Binary search
binary_insertion_sort <- function(data) {
n <- length(data)
perbandingan <- 0
pergeseran <- 0
for (i in 2:n) {
key <- data[i]
low <- 1
high <- i - 1
# Binary Search
while (low <= high) {
mid <- floor((low + high) / 2)
perbandingan <- perbandingan + 1
if (data[mid] <= key) {
low <- mid + 1
} else {
high <- mid - 1
}
}
# Menggeser elemen
j <- i - 1
while (j >= low) {
data[j+1] <- data[j]
pergeseran <- pergeseran + 1
j <- j - 1
}
data[low] <- key
cat("Pass", i-1, ":")
print(data)
}
cat("Hasil akhir:", data, "\n")
cat("Jumlah perbandingan:", perbandingan, "\n")
cat("Jumlah pergeseran:", pergeseran, "\n")
}
binary_insertion_sort(c(5, 4, 3, 2, 1))
## Pass 1 :[1] 4 5 3 2 1
## Pass 2 :[1] 3 4 5 2 1
## Pass 3 :[1] 2 3 4 5 1
## Pass 4 :[1] 1 2 3 4 5
## Hasil akhir: 1 2 3 4 5
## Jumlah perbandingan: 6
## Jumlah pergeseran: 10
#5.data eustockmarkets
data <- EuStockMarkets[1:50, "CAC"]
selection_sort <- function(data) {
n <- length(data)
perbandingan <- 0
pertukaran <- 0
for (i in 1:(n-1)) {
max_idx <- i
for (j in (i+1):n) {
perbandingan <- perbandingan + 1
if (data[j] > data[max_idx]) {
max_idx <- j
}
}
if (max_idx != i) {
temp <- data[i]
data[i] <- data[max_idx]
data[max_idx] <- temp
pertukaran <- pertukaran + 1
}
}
cat("Hasil Selection Sort:\n")
print(data)
cat("Jumlah perbandingan:", perbandingan, "\n")
cat("Jumlah pertukaran:", pertukaran, "\n")
}
selection_sort(data)
## Hasil Selection Sort:
## [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
## Jumlah perbandingan: 1225
## Jumlah pertukaran: 47
data <- EuStockMarkets[1:50, "CAC"]
insertion_sort <- function(data) {
n <- length(data)
perbandingan <- 0
pergeseran <- 0
for (i in 2:n) {
key <- data[i]
j <- i - 1
while (j >= 1) {
perbandingan <- perbandingan + 1
if (data[j] < key) {
data[j+1] <- data[j]
pergeseran <- pergeseran + 1
j <- j - 1
} else {
break
}
}
data[j+1] <- key
}
cat("Hasil Insertion Sort:\n")
print(data)
cat("Jumlah perbandingan:", perbandingan, "\n")
cat("Jumlah pergeseran:", pergeseran, "\n")
}
insertion_sort(data)
## Hasil Insertion Sort:
## [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
## Jumlah perbandingan: 1069
## Jumlah pergeseran: 1031