R语言中冒泡排序代码中的错误消息

时间:2016-03-20 03:59:05

标签: r bubble-sort

我在R语言上做了一些编程工作来进行冒泡排序。有时它在没有任何错误消息的情况下完美地工作,但有时,它显示"错误if if(x [i]> x [i + 1]){:参数长度为零"。任何人都可以帮我查看它有什么问题吗?我附上了我的代码

example <- function(x) {
  n <- length(x)
  repeat {
    hasChanged <- FALSE
    n <- n - 1 
    for(i in 1:n) {
      if ( x[i] > x[i+1] ) {
        temp <- x[i]
        x[i] <- x[i+1]
        x[i+1] <- temp
        hasChanged <- TRUE
        cat("The current  Vector is", x ,"\n")
      }
    }
    if ( !hasChanged ) break;
  }
}

x <-sample(1:10,5)
cat("The original Vector is", x ,"\n")
example(x)

1 个答案:

答案 0 :(得分:2)

发生错误是因为您正在迭代地减少n。根据原始向量的顺序(或缺少顺序),n在最后一次更改后可以达到值1。在这种情况下,在下一个迭代步骤中进一步减少n会解决值x[0],这是未定义的。

通过最小的更正,您的代码将正常工作,而不会给出错误消息。尝试替换

if ( !hasChanged ) break;

if ( !hasChanged | n==1 ) break

基本上你有两个终止标准:在前一次迭代中没有任何变化,或n等于一。在这两种情况下,进一步的迭代都不会改变向量,因为它已经被排序。

顺便说一句,在R编程中,您不需要在命令结尾处使用分号。解释器可以容忍/忽略它,但它会使代码混乱,并且不被认为是良好的编程风格。

希望这有帮助。