试图对R中的元素向量进行排序

时间:2017-09-29 14:51:42

标签: r

有人能告诉我我做错了什么吗?我试图使用R在给定的向量上构建冒泡排序机制,但它会抛出一个错误。 v [1]指v的第一个元素,即6。

v <- c(6,2,5,8)
c <- 1
n <- length(v)
   while(c <- n){
     if(v[c + 1] < v[c]){
      v[c] <- v[c] + v[c+1]
      v[c+1] <- v[c] - v[c+1]
      v[c] <- v[c] - v[c+1]
      c <- c + 1
      }else{
      c <- c + 1
   }
  return(v)
}

3 个答案:

答案 0 :(得分:1)

我通过Google搜索R的语法找到的语法错误: 在你的while循环中你说(c <- n)。这应该是(c <= n)

答案 1 :(得分:0)

我认为你正在寻找这个:

sort(v)

干杯

答案 2 :(得分:0)

这是一段很长的时间,因为我编写了一个泡泡排序,但我仍然记得很清楚。有几种方法可以实现它,这是一个。

changed <- TRUE
while(changed){
    changed <- FALSE
    for(i in seq_along(v)[-length(v)]){
        if(v[i] > v[i + 1]){
            v[i] <- v[i] + v[i + 1]
            v[i + 1] <- v[i] - v[i + 1]
            v[i] <- v[i] - v[i + 1]
            changed <- TRUE
        }
    }
}

v
[1] 2 5 6 8

至于你的例程,除了Jordy Brinks所说的之外,还有一个事实是你的while循环只能通过向量进行一次传递,给你一个O(n)排序!算法错了......
你不应该把c <- c + 1放在if/else语句的两个分支上,把它放在它之后。