Miért nem működik a quicksort?
void quicksort(int* t, int b, int j)
{
int k;
if (b<j)
{
k = feloszt(t,b,j);
quicksort(t,b,k-1);
quicksort(t,k+1,j);
}
}
void feloszt(int* t, int bal, int jobb)
{
int i, j, x, csere;
x = t[jobb];
i = bal - 1;
for (j=bal; j<jobb; j++)
{
if (t[j]<=x)
{
i++;
csere = t[i];
t[i] = t[j];
t[j] = csere;
}
}
csere = t[i+1];
t[i+1] = t[jobb];
t[jobb] = csere;
return i+1;
}
Ez alapján írtam: [link]
Mégsem jó valami...
És quicksort(t,0,n-1)-re hívtam meg.
Debugoltam, az első x=t[jobb] -nál ad ki hibát, az x érték felvesz egy óriási számot, nem tudom miért...
Wikipédia szerint:
algorithm quicksort(A, lo, hi) is
if lo < hi then
p := partition(A, lo, hi)
quicksort(A, lo, p – 1)
quicksort(A, p + 1, hi)
algorithm partition(A, lo, hi) is
pivot := A[hi]
i := lo - 1
for j := lo to hi - 1 do
if A[j] ≤ pivot then
i := i + 1
swap A[i] with A[j]
swap A[i+1] with A[hi]
return i + 1
Ugyanaz amit írtam. Nem tudok rájönni a hibára, pedig ezen gondolkodom egy órája.
a feloszt nem void, hanem int:))
hulye vagyok.
igy mar mukodik
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!