【问题标题】:Error message in Bubble sort code in R languageR语言冒泡排序代码中的错误消息
【发布时间】:2016-07-06 17:24:06
【问题描述】:

我在 R 语言上做了一些编程工作来进行冒泡排序。有时它可以完美运行而没有任何错误消息,但有时会显示“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)

【问题讨论】:

  • 您是否考虑过使用traceback 来确定哪个函数调用得到了错误的输入?您还应该摆脱那些无用的空行。

标签: r bubble-sort


【解决方案1】:

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

只要稍加修正,您的代码就可以正常工作,而不会出现错误消息。换行试试

if ( !hasChanged ) break;

if ( !hasChanged | n==1 ) break

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

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

希望这会有所帮助。

【讨论】:

  • +1 尽管在修复代码时进行最小的更改并不是解决此问题的最佳方法,但这毫无价值。更好的方法是稍后减少n;但这需要更多的重写。
猜你喜欢
  • 1970-01-01
  • 2017-06-21
  • 2016-07-03
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多