*> csort <- function(c){
i<-1
for (i in 1:length(c)-1) {
j <- i+1
for (j in 2:length(c)) {
if(c[i] >= c[j])c[c(i,j)] <- c[c(j,i)]
j = j + 1
}
i = i + 1
}
}
> csort(a)
Error in if (c[i] >= c[j]) c[c(i, j)] <- c[c(j, i)] :
argument is of length zero*
这是我运行RStudio时所做的。我不知道是什么原因导致零。
答案 0 :(得分:0)
您的错误在此行
for (i in 1:length(c)-1)
并且应该是
for (i in 1:(length(c)-1))
因为$:$运算符先于$-$。
一个例子是
1:(5-1)
#[1] 1 2 3 4
1:5-1
#[1] 0 1 2 3 4
所以索引值为零的错误发生了。
csort <- function(d){
for (i in 1:(length(d)-1)) {
for (j in (i+1):length(d)) {
if(d[i] >= d[j])d[c(i,j)] <- d[c(j,i)]
}
}
return(d)
}
d<-c(5:1,-1:3,-9,-3,10,9,-20,1,20,-6,5)
any((csort(d)==sort(d))==F)
#[1] FALSE
您可以改善此功能。
答案 1 :(得分:0)
csort <- function(c){
p <- 1
povit <- c[1]
c <- c[-1]
left <- c()
right <- c()
left <- c[which(c <= povit)]
right <- c[which(c > povit)]
if(length(left) > 1){
left <- csort(left)
}
if(length(right) > 1){
right <- csort(right)
}
return(c(left ,povit,right))
}
我查看了有关在线排序的更多信息,这是一种关键的排序方式。