# Bucket Sort Function
# Sorts an input vector using the Bucket Sort algorithm.
# Parameters:
# - arr: Input vector to be sorted.
# Returns:
# - Sorted vector.
bucket_sort <- function(arr) {
  if (length(arr) == 0) {
    return(arr)
  }
  
  # Find the maximum and minimum values in the input vector
  max_val <- max(arr)
  min_val <- min(arr)
  
  # Create an array of buckets
  num_buckets <- max_val - min_val + 1
  buckets <- vector("list", length = num_buckets)
  
  # Initialize the buckets
  for (i in 1:num_buckets) {
    buckets[[i]] <- numeric(0)
  }
  
  # Place elements into buckets
  for (val in arr) {
    bucket_index <- val - min_val + 1
    buckets[[bucket_index]] <- c(buckets[[bucket_index]], val)
  }
  
  # Sort each bucket (using any sorting algorithm, e.g., Bubble Sort)
  sorted_buckets <- lapply(buckets, bubble.sort)
  
  # Concatenate the sorted buckets to obtain the final sorted array
  sorted_arr <- unlist(sorted_buckets)
  
  return(sorted_arr)
}

# Example usage:
elements_vec <- c(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
bucket_sorted_vec <- bucket_sort(elements_vec)
## Error in match.fun(FUN): object 'bubble.sort' not found
print(bucket_sorted_vec)
## Error in print(bucket_sorted_vec): object 'bucket_sorted_vec' not found