zu "lokirobotics" : Habs probiert, gibt einen Stackoverflow......
Und "sternst" geb ich auch recht. "l" und "r" treffen irgendwann den wert von "p".
Habe mich grad mal intesiver damit auseinandergesetzt.
Habe ein (weils mir leichter fällt) Pascal (Delphi) Programm geschrieben, welches nun einwandfrei läuft.
Nun habe ich es nach "C" konvertiert. Da ich doch noch erhebliche Probleme mit "C" habe, wird mir dabei sicher ein Fehler unterlaufen sein. Den find ich nur irgendwie nicht.
Könnt Ihr da mal drauf schauen, was ich dort falsch gemacht habe. Das C-Programm bekommt einen Stackoverflow.....
Zunächst meine funktionierende Pascal-Variante:
Code:
const ar:Array[0..4] of Integer = (5,4,3,2,1);
procedure QSort(lo,hi:Integer);
var left,right,mid,tmp:Integer;
begin
left := lo;
right := hi;
mid := ar[(lo+hi) DIV 2];
repeat
while (ar[left] < mid) do inc(left);
while (ar[right] > mid) do dec(right);
if left <= right then begin
tmp := ar[left];
ar[left] := ar[right];
ar[right] := tmp;
inc(left);
dec(right);
end;
until left > right;
if right > lo then QSort(lo,right);
if left < hi then QSort(left,hi);
end;
begin
QSort(0,sizeof(ar) DIV sizeof(ar[0]) -1);
end.
und nun mein anscheinend fasch konvertiertes "C" Programm
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++;
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 danke euch,
Siro
Lesezeichen