Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取R中用于快速排序的节点堆栈溢出错误 快速排序x[k]) j=k } 如果(!j) j=s if(ix快速(x) 错误:节点堆栈溢出_R_Stack Overflow_Quicksort - Fatal编程技术网

获取R中用于快速排序的节点堆栈溢出错误 快速排序x[k]) j=k } 如果(!j) j=s if(ix快速(x) 错误:节点堆栈溢出

获取R中用于快速排序的节点堆栈溢出错误 快速排序x[k]) j=k } 如果(!j) j=s if(ix快速(x) 错误:节点堆栈溢出,r,stack-overflow,quicksort,R,Stack Overflow,Quicksort,当我用向量运行这个I R控制台时,我得到了一个错误 quicksort <- function(x, s, e) { p = s i = 0 j = 0 for (k in 1:length(x)) { if (x[p] < x[k]) i = k } if (!i) i = e for (k in length(x):1) { if (x[p] >

当我用向量运行这个I R控制台时,我得到了一个错误

quicksort <- function(x, s, e) {
    p = s
    i = 0
    j = 0
    for (k in 1:length(x)) {
        if (x[p] < x[k]) 
            i = k
    }
    if (!i) 
        i = e
    for (k in length(x):1) {
        if (x[p] > x[k]) 
            j = k
    }
    if (!j) 
        j = s
    if (i < j) {
        t = x[i]
        x[i] = x[j]
        x[j] = t
    } else {
        t = x[j]
        x[j] = x[p]
        x[p] = t
        quicksort(x, s, j - 1)
        quicksort(x, j + 1, e)
    }
    x
}
quick = function(x) {
    quicksort(x, 1, length(x))
}
>x快速(x)
错误:节点堆栈溢出
在R控制台中测试每个命令时,如果完整的代码不能完美地工作,那么代码的逻辑正确与否

将代码修改为

> x<-c(4,47,480,15,0,147,1,56862,12)
> quick(x)
Error: node stack overflow

QuickPort手动运行几次。您会注意到,在某些时候,您正在使用与使用输入函数相同的参数调用quicksort。所以如果没有什么变化。。。它最终会调用quicksort(x,1,0),然后在它调用quicksort(x,1,0)的函数中的某个地方调用quicksort(x,1,0),然后在该函数中的某个地方调用quicksort(x,1,0)…@Dason我认为是无限递归的问题
quicksort<-function(x){
if(length(x)<=1)return(x)
p<-x[1]
therest<-x[-1]
i<-therest[therest<p]
j<-therest[therest>p]
i<-quicksort(i)
j<-quicksort(j)
return(c(i,p,j))
}
> x<-c(4,47,480,15,0,147,1,56862,12)
> quicksort(x)
[1]     0     1     4    12    15    47   147   480 56862