【发布时间】:2014-07-13 11:37:22
【问题描述】:
我最近开始使用R,并尝试实现快速排序。我正在使用《算法简介(第 3 版)》一书
我正在使用RStudio 并没有看到任何错误,但它返回的向量与传递的向量相同,我是否假设有问题?我相信我的代码与本书的伪代码显示的相匹配。伪代码如下:
Partition(A, p, r)
x = A[r]
i = p - 1
for j = p to r - 1
if A[j] <= x
i = i + 1
swap(A[i], A[j])
swap(A[i+1], A[r]
return i + 1
Quicksort(A, p, r)
if p < r
q = Partition(A, p, r)
Quicksort(A, p, q - 1)
Quicksort(A, q + 1, r)
我比R写了同样的两个函数:
partition <- function(a, p, r) {
x = a[r]
i = p - 1
for (j in p:(r-1)) {
if (a[j] <= x) {
i = i + 1
t = a[i]
a[i] = a[j]
a[j] = t
}
}
t = a[i+1]
a[i+1] = a[r]
a[r] = t
i+1
}
quicksort <- function(a, p, r) {
if (p < r) {
q = partition(a, p, r)
quicksort(a, p, q-1)
quicksort(a, q+1, r)
}
a
}
在RStudio 中,我获取文件并使用我创建的向量调用它:
> v
[1] 8 5 6 7 4 1 3 2
> quicksort(v, 1, length(v))
[1] 8 5 6 7 4 1 3 2
据我所知,您可以在 R 中执行递归函数,我知道您不能通过引用传递,但这不会调用具有更改向量的相同函数吗?我对为什么它返回传递的相同向量感到困惑。任何帮助将不胜感激。
【问题讨论】:
-
缺少引用传递意味着您无法使用递归调用更改
a。
标签: r parameter-passing pass-by-reference pass-by-value