Witam, w książce pt. "Algorytmy, struktury danych i techniki programowania" jest podany następujący algorytm Quick Sort:
void quicksort(int *tab,int left, int right)
{
if(left<right)
{
int m = left;
for(int i=left+1; i<=right; i++)
if(tab[i] < tab[left])
swap(tab[++m], tab[i]);
swap(tab[m], tab[left]);
quicksort(tab, left, m-1);
quicksort(tab, m+1, right);
}
}
gdy elementy są ułożone losowo to wszystko jest dobrze, gdy natomiast zbiór wejściowy jest już uporządkowany czas wykonania algorytmu trwa bardzo długo, tutaj dane:
czas dla losowych liczb: 0.929964
elementy zbioru wejściowego ułożone w porządku rosnącym (tak ma sortować algorytm): 30.39831
w porządku malejącym: 61.713641
czas podany w milisekundach
Stąd moje pytanie, dlaczego tak?