2011-11-06 2 views
0
def recursive_insert(arr) 
    return arr if arr.size<=1 
    recursive_insert(arr[0,arr.size-1]) 
    i=arr.size-1 
    while arr[i-1]>arr[i] and i>0 
    arr[i],arr[i-1] = arr[i-1],arr[i] 
    i-=1 
    end 
    arr 
end 
arr=[5,4,3,2,6,1] 
x=recursive_insert(arr) 
puts x.inspect 

이것은 작동하지 않습니다. 나는 Ruby가 각각의 재귀 호출에 대해 내 arr 변수가 업데이트되는 것을 막는 참조 메커니즘에 의한 패스가 있다고 의심한다.재귀 삽입 정렬을 작성하려면 어떻게해야합니까?

어떻게 해결할 수 있습니까? Ruby에서 재귀 함수를 작성하는 데는 많은 어려움이 있습니다.

+0

참고로 따라서 아니오 패스 재귀 구현이다. 배열 소팅 알고리즘이 이미 구현되어 있으므로이를 사용할 수 있습니다. 정렬 알고리즘을 구현하려는 경우 C/C++에서 직접 처리하지 않는 것이 좋습니다. 루비는 쉽고 사용하기 쉽도록 만들어졌습니다. –

+0

@KassymDorsel 예, 파이썬과 루비 같은 스크립팅 언어는 상위 레벨의 데이터 구조와 알고리즘을 구현하는 데는 적합하지만 저수준에는 적합하지 않다고 생각합니다. 나는 상세한 구현을 위해 C를 사용하는 것을 선호한다. 난 그냥 몇 가지 데이터 구조와 고민 문제를 해결하여 루비에 대한 나의 이해를 테스트하고 싶다. 감사합니다 – zsljulius

답변

2

이 :

arr[0, arr.size - 1] 

그 사본 arr의 일부 변경의 사본을 반환은 arr에 반영되지 않습니다. 그래서, 당신의 재귀 단계는 아무것도 유용하지 않고, 당신의 방법이 동일합니다 :

def recursive_insert(arr) 
    return arr if arr.size<=1 
    i=arr.size-1 
    while arr[i-1]>arr[i] and i>0 
    arr[i],arr[i-1] = arr[i-1],arr[i] 
    i-=1 
    end 
    arr 
end 

을하고은 (는) 정확한 위치에 1을 얻고 그게 다야.

+0

답장을 보내 주셔서 감사합니다. 예, 이것도 제가 의심 한 이유입니다. 어쨌든 해결할 줄 알아? – zsljulius

+1

@zsljulius : 첫 번째 및 마지막 인덱스를 배열과 함께 전달합니다. 또는 배열을 래핑하고 배열 세그먼트의 "독성"을 유지하는 클래스를 작성하십시오. –

-1
void insertInOrder(int * a , int start ,int element) 
{ 
    if(start < 0) 
    { 
     a[start + 1] = element; 
     return; 
    } 
    else 
    { 
     if(element < a[start]) 
     { 
      a[start+ 1] = a[start]; 
      insertInOrder(a,start-1,element); 
     } 
     else 
      a[start + 1] = element; 
    } 
} 
void recursiveInsertionSort(int * a , int start , int end) 
{ 
    if(start >= end) 
     return; 
    else 
    { 
     insertInOrder(a,start,a[start+1]); 
     recursiveInsertionSort(a,start+1,end); 
    } 
} 
void main() 
{ 
    const int SIZE = 5; 
    int a[SIZE] = {9,8,7,6,10}; 
    recursiveInsertionSort(a,0,SIZE-1); 
    for(int i = 0 ; i < SIZE ; i++) 
    { 
     cout<<a[i]<<" "; 
    } 
} 

이 C에 삽입 정렬 ++ 루비하는 포인터가없는

관련 문제