Ich habe mein Problem gefunden. Habe es selbst verursacht weil ich komplett mit unsigned Werten U16 gearbeitet habe.
Das geht hier schief. Ich muss Signed bzw. "int" benutzen. hab ich in Pascal ja auch getan.
Der Wert "right" landete bei -1 (also 65535) und dann ging natürlich die Abfrage falsch.
oder ich schreibe hinter der left++ Zeile, im unterem Abschnitt if (right) right--; dann geht es auch mit unsigned Werten.
Hier noch mal die korrigierte Version:
Code:
U16 ar[5] = {5,4,3,2,1};
void QSort(U16 lo, U16 hi)
{ U16 left,right,mid,tmp;
left = lo;
right = hi;
mid = ar[(lo+hi)/2];
do
{
while (ar[left] < mid) left++;
while (ar[right] > mid) right--;
if (left <= right)
{
tmp = ar[left];
ar[left] = ar[right];
ar[right] = tmp;
left++;
if (right) right--;
}
} while (left <= right);
if (right > lo) QSort(lo, right);
if (left < hi) QSort(left, hi);
}
int main(void)
{
QSort(0,sizeof(ar) / sizeof(ar[0]) -1);
}
Ich glaub jetzt hab ich alle Probleme gelöst, wird ja auch Zeit fürs Wochenende.
Siro
Lesezeichen