Skip to content

Commit dea7c47

Browse files
authored
Add Pigeonhole Sort Algorithm in R (#234)
1 parent 69ac9b1 commit dea7c47

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Pigeonhole Sort Function
2+
# Sorts an integer vector using the Pigeonhole Sort algorithm.
3+
# Parameters:
4+
# - arr: Input integer vector to be sorted.
5+
# Returns:
6+
# - Sorted vector.
7+
8+
pigeonhole_sort <- function(arr) {
9+
# Handle empty input
10+
if (length(arr) == 0) return(arr)
11+
12+
# Pigeonhole sort is defined for integers
13+
if (!all(arr == floor(arr))) {
14+
stop("pigeonhole_sort works with integer values only.")
15+
}
16+
17+
# Find range
18+
min_val <- min(arr)
19+
max_val <- max(arr)
20+
range <- as.integer(max_val - min_val + 1L)
21+
22+
# Create holes (counts per value)
23+
holes <- integer(range)
24+
25+
# Populate holes
26+
for (i in seq_along(arr)) {
27+
holes[arr[i] - min_val + 1L] <- holes[arr[i] - min_val + 1L] + 1L
28+
}
29+
30+
# Reconstruct sorted array
31+
idx <- 1L
32+
for (i in seq_len(range)) {
33+
cnt <- holes[i]
34+
if (cnt > 0L) {
35+
val <- (i - 1L) + min_val
36+
arr[idx:(idx + cnt - 1L)] <- val
37+
idx <- idx + cnt
38+
}
39+
}
40+
41+
return(arr)
42+
}
43+
44+
# Example usage:
45+
# ---------------
46+
# Input: c(8, 3, 2, 7, 4, 6, 8)
47+
# Output: c(2, 3, 4, 6, 7, 8, 8)
48+
49+
elements_vec <- c(8, 3, 2, 7, 4, 6, 8)
50+
sorted_vec <- pigeonhole_sort(elements_vec)
51+
print(sorted_vec)

0 commit comments

Comments
 (0)