私はテール再帰を使用して次のランダム化クイックソートコードを書いています。私は末尾再帰を使用しないという効果を見たいと思っていましたし、実行時間と実行時間がどのように影響を受けているのかを見たいと思っていました。下のランダム化クイックソートコードから末尾再帰を削除するにはどうすればよいですか?テール再帰のないクイックソート
#include<iostream>
#include<cstdlib>
using namespace std;
int partition(int low,int high,int a[])
{
int index=(rand()%(high-low))+low;
//cout<<endl<<index<<"----"<<endl;
int temp1=a[index];
a[index]=a[low];
a[low]=temp1;
int left,right,pivot_item=a[low];
left=low;
right=high;
while(left<right)
{
while(a[left]<=pivot_item)
left++;
while(a[right]>pivot_item)
right--;
if(left<right)
{
int temp=a[right];
a[right]=a[left];
a[left]=temp;
}
}
a[low]=a[right];
a[right]=pivot_item;
return right;
}
void quicksort(int low,int high,int a[])
{
int pivot;
if(low<high)
{
pivot=partition(low,high,a);
quicksort(low,pivot-1,a);
quicksort(pivot+1,high,a);
}
}
int main()
{
srand(time(NULL));
int n;
n=50;
int a[n];
int i;
for(i=0;i<n;i++)
a[i]=(rand()%(1000-1));
quicksort(0,n-1,a);
cout<<endl;
for(i=0;i<n;i++)
cout<<a[i]<<endl;
return 0;
}
EDIT: 全くquicksort
機能における第二の再帰呼び出しを削除する方法はあります。これは末尾再帰を取り除くことを意味し、時間にも大きな影響を与えます。
'以下のランダム化されたクイックソートコードから末尾再帰を削除するにはどうすればよいですか? – Bonatti
私はhttp://www.geeksforgeeks.org/tail-recursion/の行に沿って考えてみましたが、どうやってそれを実装できるかは実際には分かりませんでした。 – RaviTej310
前に[この(方法)](http://stackoverflow.com/help/how-to-ask)と[this(mcve)](http://stackoverflow.com/help/mcve)をお読みください。あなたがコミュニティからより多くの、より良い回答を得るのを助けるように、 と尋ねます。 – Bonatti