以下C代碼從給定的左側索引和給定的右側索引中搜索數組a [], j)的其中左手食指之間的每一個數組值和i小於v和j和右索引之間的每一個數組值大於v:在R中應用「while(a [++ i] <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 <-i + 1] < v」的計算順序嗎?我的RStudio實現?
我在適當的地方對向量a應用匿名函數(遞減和比較),但這樣寫起來更簡單。
任何想法,將不勝感激。
我懷疑'which'和'diff'的組合可以做一個R向量操作,比'while循環會更有效率。爲什麼不放入數據示例和正確答案的規範? –
好的,謝謝,我編輯了原始問題以包含一個示例。對不起,我在初始化j的代碼片段中有一個拼寫錯誤,所以我也糾正了這個錯誤。 –