Ich habe den folgenden randomisierten Quicksort-Code mit Tail-Rekursion geschrieben. Ich wollte den Effekt sehen, keine Tail-Rekursion zu verwenden und wollte sehen, wie die Ausführungszeit und die Laufzeit beeinflusst werden. Wie können wir die Schwanzrekursion aus dem folgenden randomisierten Quicksort-Code entfernen?Quicksort ohne Schwanz Rekursion
#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: Gibt es eine Möglichkeit, den zweiten rekursive Aufruf in der quicksort
Funktion sogar komplett zu löschen. Dies würde das Entfernen der Schwanzrekursion bedeuten und würde auch die Zeit signifikant beeinflussen.
'Wie können wir die Schwanzrekursion aus dem folgenden randomisierten Quicksort-Code entfernen?' Und was hast du schon versucht? – Bonatti
Ich habe versucht, entlang der Linien von http://www.geeksforgeeks.org/tail-recursion/ zu denken, aber habe nicht wirklich verstanden, wie ich es umsetzen könnte. – RaviTej310
Bitte lesen Sie [diese (wie Sie fragen)] (http://stackoverflow.com/help/how-to-ask) und [diese (mcve)] (http://stackoverflow.com/help/mcve) vor Fragen, als diese werden Ihnen helfen, mehr und bessere Antworten von der Gemeinschaft zu bekommen. – Bonatti