我是编程新手,我刚开始学习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]&gt; x [i + 1]){:参数长度为零
时出错
答案 0 :(得分:3)
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
答案 1 :(得分:1)
您的排序算法存在一些不准确之处。我做了一些改动以使其发挥作用。
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
BTW,R语言有很多功能和方法。这个example
函数可以是一个学习示例,但我建议使用现有函数sort
来解决实际问题。
在R语言中,您应该尝试避免循环并使用向量化函数来使代码更快。
答案 2 :(得分:0)
它会给您该错误消息,因为他无法比较超出其范围的值(在[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循环中切换>符号即可。