2016-04-26 61 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)