r - [R} 使用 for 循环对元素进行排序时追加的问题

标签 r sorting for-loop append

我被要求使用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/

相关文章:

r - 使用 xlsx 包保存 data.frame 时如何避免写入 row.names 列

javascript - ngFor 循环继续执行并使用 firebase 数据库在 ionic 3 中使应用程序崩溃

python - 按长度和最后 N 个字符对字符串列表进行排序

Javascript 按顺序排序数组

algorithm - 合并排序链表

powershell - 找不到接受参数 '\*'的位置参数

iphone - 按钮不会添加到 View 中

r - 如何为ggplot2中的离散变量创建颜色渐变?

r - 如何在R中的重复字符串中选择最长的ngram?

保留组中的第一个值