2016-04-26 38 views
1

我在rstudio通過豪爾分區工作快速排序。我發現一些代碼http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Julia 他們使用Julia我測試他們,他們工作正常。但是當我將它們翻譯成r.script時,排序編程不起作用。 (我也翻譯他們在python和程序工作,所以我想代碼是正確的)。我試圖解決A = [ - 3,3,-4,2,0],R中的代碼如下:快速排序通過豪爾分區在r

quicksort = function (A,i,j) { 
    if (j>i){ 
    pivot = A[i] 
    left=i 
    right=j 

    while (left <= right) { 
     while (A[left] < pivot) { 
     left=left+1 
      } 
     while (A[right] > pivot) { 
     right=right-1 
      } 
     if (left <= right){ 
     temp=A[left] 
     A[left]=A[right] 
     A[right]=temp 
     left=left+1 
     right=right-1 
     } 
    } 
    quicksort(A,i,right) 
    quicksort(A,left,j) 
    } 

    return (A) 
} 

我得到了排序結果爲[-4,3,-3,2, 0],程序似乎只是跳過遞歸部分,只進行一次排序。任何人都可以告訴我爲什麼它不適用於r?

+0

這更是一個代碼狩獵運動,但你的問題似乎是在這裏:'支點= A [1]'...'而(A [left] lmo

+0

與Julia或Python不同,R按值傳遞所有基元(包括數組)。所以這個功能不是就地的,不像Julia版本。 @CactusWoman的回答是正確的。 –

回答

3

只需撥打quicksort(A,i,right)就不會做任何事情。該函數不會改變您傳遞給它的對象。取而代之的,所以你分配輸出到A改變這些行:

A = quicksort(A,i,right) 
A = quicksort(A,left,j)