Witam, tworzę kod sprawdzający czas działania poszczególnych sortowań w zależności od rozmiaru sortowanej tablicy, wszystkie które potrzebuję działają, poza quicksortem, z kluczem jako medianą z 3 elementów, z którym użeram się już parę godzin. Siedzę na VS2012.
Wrzucam tylko kod quicksorta na podstawie danego mi pseudokodu.
int mediana(int A, int B, int C) //te "ory" wydają mi się niepotrzebne, ale też chyba w niczym nie przeszkadzają
{ //a właśnie w tym miejscu program kończy swą działalność z komunikatem błędu
if ((B > C && B < A) || (B < C && B > A)) //w dostępie do pamięci
return B;
else if ((C > A && C < B) || (C < A && C > B))
return C;
else
return A;
}
int quick1(int *tab, int d, int g)
{
int s, t, i, tmp;
if (d < g)
{
t = mediana(*(tab+d), *(tab+(g/2)), *(tab+g));
s = d;
for (i = d + 1; i <= g; i++)
{
if (*(tab + i) < t)
{
s = s + 1;
tmp = *(tab + s);
*(tab + s) = *(tab + i);
*(tab + i) = tmp;
}
}
tmp = *(tab + d);
*(tab + d) = *(tab + s);
*(tab + s) = tmp;
quick1(tab, d, s - 1);
quick1(tab, s + 1, g);
}
return 0;
}
Ciekawi mnie gdzie popełniłem błąd. Any ideas?
Pozdrawiam