2016-04-26 5 views
1

私はrstudioのhoareパーティションでquicksortに取り組んだ。私はhttp://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Julia にいくつかのコードを見つけましたJuliaと私はそれらをテストし、彼らは正常に動作します。しかし、それらをr.scriptに翻訳すると、並べ替えプログラムが機能しません。 (私ものpythonで翻訳していますので、コードは正しいと思います)。rareのホアレパーティションによるクイックソート

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) 
} 

Iは、-4,3、-3,2 [として結果をソートして得た:Rのコードは次され、 - [3,3、-4,2,0] Iは、A =を分類しようとします0]、それはプログラムが単に再帰部分をスキップし、並べ替えを1回だけ行うようです。誰も私がrで動作しない理由を教えてもらえますか?

+0

これは、コードの狩猟エクササイズ以上であったが、あなたの問題はここにあると思われる: 'ピボット= A [i]は' ... 'しばらく(A [左] <ピボット){'この[while]ループは、A [i] = A [左] =ピボットとしてトリガされることはありません。 – lmo

+0

Rは、JuliaやPythonとは異なり、すべてのプリミティブ(配列を含む)を値で渡します。したがって、この機能はJuliaバージョンとは異なり、インプレースではありません。 @CactusWomanの答えは正しいです。 –

答えて

3

quicksort(A,i,right)と呼ぶだけで何もしません。この関数は、渡すオブジェクトを変更しません。あなたはAに出力を割り当てているので、その代わりに、これらの行を変更:

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