【发布时间】:2014-03-06 23:40:37
【问题描述】:
以下 C 代码从给定的左索引和给定的右索引搜索数组 a[],以查找左索引和 i 之间的每个数组值都小于 v 的两个索引(i 和 j) ,并且 j 和右索引之间的每个数组值都大于 v:
i= leftindex - 1 ;
j = rightindex ;
while(TRUE) {
while( a[++i] < v) ;
while( a[--j] > v) ;
if (i >= j ) { break }
... }
这种结构可以在快速排序算法的各种实现中看到。
我的问题是:当 a 是向量时,以下是在 R 语言中完成相同任务的最有效方法吗?
i = leftindex - 1 ;
j = rightindex ;
v = a[rightindex]
while(TRUE) {
while (a[i <- i+1] < v ) { } # R doesn't get the ++ operator
while (a[j <- j-1] > v) { } # R doesn't get the -- operator
if (i >= j ) { break }
...
}
因此,例如,如果'a'是:
a <- c('a','s','o','r','t','i','n','g','e','x','a','m','p','l','e')
...和
left.index = 1; right.index = 15
...然后在这段代码运行后,我希望 v、i 和 j 的值是:
v = e
i = 2
j = 11
我在 R 中找不到任何定义运算符“++”或“--”的内容。
R 中的优先级是否保证 "a[i
我想在适当的地方对向量 a 应用一个匿名函数(递减和比较),但这样写起来更简单。
任何想法将不胜感激。
【问题讨论】:
-
我怀疑
which和diff的组合可以执行 R 向量操作,这将比while循环更有效。为什么不提供一个数据示例和您对正确答案的说明? -
好的,谢谢,我编辑了原始问题以包含一个示例。抱歉,我在初始化 j 的代码 sn-p 中有错字,所以我也更正了。
标签: c arrays r operator-precedence