我被要求仅使用for循环将包含随机顺序数字的向量重新排列为降序。
#请运行这两行代码
set.seed(114324)
num <- sample(100,10) #return 96 4 87 11 74 6 37 45 14 26
我的尝试失败了。
mx = c(-Inf)
for (i in 1:10){
for (j in 1:10){
if (num[i] > mx[j]){
mx <- append(num[i], mx, i)
} else {
mx <- append(mx, num[i])
}
}
}
mx
我的想法是比较 num 的每个元素并将元素一个接一个地排列。如果数字大于mx中的第一个数字,那么它将被放置在最左边的位置。如果没有,则放在mx第一个或后续位置的右侧。
如果您能提供建议,我将不胜感激。非常感谢。
最佳答案
这是 bubble sort 的一个版本.
冒泡排序是一个坏主意,我在 StackExchange 中搜索了一个提到 this job interview question 的 Q/A。但没找到。
bubble <- function(x) {
for(m in seq_along(x)[-1L]) {
for(i in length(x):m) {
if(x[i - 1L] < x[i]) {
tmp <- x[i - 1L]
x[i - 1L] <- x[i]
x[i] <- tmp
}
}
}
x
}
set.seed(114324)
num <- sample(100,10) #return 96 4 87 11 74 6 37 45 14 26
bubble(num)
#> [1] 96 87 74 45 37 26 14 11 6 4
创建于 2023 年 9 月 19 日 reprex v2.0.2
编辑
问题要求降序排列,但为了完整起见,这里有一个也可以按升序排序的版本。它的默认顺序是降序。
bubble <- function(x, descending = TRUE) {
op <- if(descending) `<` else `>`
for(m in seq_along(x)[-1L]) {
for(i in length(x):m) {
if(op(x[i - 1L], x[i])) {
tmp <- x[i - 1L]
x[i - 1L] <- x[i]
x[i] <- tmp
}
}
}
x
}
bubble(num)
#> [1] 96 87 74 45 37 26 14 11 6 4
bubble(num, FALSE)
#> [1] 4 6 11 14 26 37 45 74 87 96
创建于 2023 年 9 月 19 日 reprex v2.0.2
关于r - [R} 使用 for 循环对元素进行排序时追加的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77134364/