使用R语言进行冒泡排序?
Posted
技术标签:
【中文标题】使用R语言进行冒泡排序?【英文标题】:Bubble sort using R language? 【发布时间】:2016-07-03 05:55:49 【问题描述】:我是编程新手,刚开始学习 R 语言。我正在尝试进行冒泡排序,但它显示以下错误消息。谁能帮我解决问题?
x <-sample(1:100,10)
n <- length(x)
example <- function(x)
for (i in 1:n-1)
while (x[i] > x[i+1])
temp <- x[i+1]
x[i+1] <- x[i]
x[i] <- temp
i <- i+1
example(x)
while (x[i] > x[i + 1]) : 参数长度为零时出错
【问题讨论】:
旁白:1:n-1
应该是1:(n-1)
此外,该函数不返回任何内容。也许还有其他问题?
除了 Richard 所说的,试试 1:10-1
和 1:(10-1)
看看为什么会出现这个错误。
我现在没有看到任何错误消息。但似乎“While”和“for”循环根本不起作用。结果显示原始 X,未排序 X。有什么意见吗?
@Andy,你指定返回值了吗?
【参考方案1】:
x<-sample(1:100,10)
example <- function(x)
n<-length(x)
for(j in 1:(n-1))
for(i in 1:(n-j))
if(x[i]>x[i+1])
temp<-x[i]
x[i]<-x[i+1]
x[i+1]<-temp
return(x)
res<-example(x)
#input
x
#output
res
只需对您的代码进行少量修改,它就可以正常工作。在 'R' 中最好使用 sort() 函数。
x <-sample(1:100,10)
x
res<-sort(x)
res
【讨论】:
【参考方案2】:您的排序算法有一些不准确之处。我已经进行了更改以使其正常工作。
set.seed(1)
x <-sample(1:100,10)
x
# [1] 27 37 57 89 20 86 97 62 58 6
example <- function(x)
n <- length(x) # better insert this line inside the sorting function
for (k in n:2) # every iteration of the outer loop bubbles the maximum element
# of the array to the end
i <- 1
while (i < k) # i is the index for nested loop, no need to do i < n
# because passing j iterations of the for loop already
# places j maximum elements to the last j positions
if (x[i] > x[i+1]) # if the element is greater than the next one we change them
temp <- x[i+1]
x[i+1] <- x[i]
x[i] <- temp
i <- i+1 # moving to the next element
x # returning sorted x (the last evaluated value inside the body
# of the function is returned), we can also write return(x)
example(x)
# [1] 6 20 27 37 57 58 62 86 89 97
顺便说一句,R语言有很多做事的函数和方法。这个example
函数可以作为一个学习示例,但我建议使用现有函数sort
来解决实际问题。
在 R 语言中,您应该尽量避免循环并使用矢量化函数来使代码更快。
【讨论】:
我知道使用temp
变量是交换两个变量的经典方法,但在 R 中你可以这样做 x[c(i,i+1)] = x[c(i+1,i)]
【参考方案3】:
它给你这个错误信息,因为他无法比较一个超出他界限的值,你在 (x[i] > x[i + 1]) 时就是这种情况。如果您想按降序对数组进行排序,请尝试以下操作:
for (i in 1:n)
j = i
while((j>1))
if ((X[j]> X[j-1]))
temp = X[j]
X[j] = X[j-1]
X[j-1] = temp
j = j-1
对于递增顺序,您只需在 while 循环中切换 > 符号。
【讨论】:
以上是关于使用R语言进行冒泡排序?的主要内容,如果未能解决你的问题,请参考以下文章