簡體   English   中英

如何編寫遞歸插入排序?

[英]How do I write a recursive insertion sort?

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中編寫遞歸函數有很多困難。

這個:

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放在正確的位置,僅此而已。

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 ++中插入排序的遞歸實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM