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:
und nun mein anscheinend fasch konvertiertes "C" ProgrammCode: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.
Ich danke euch,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); }
Siro







Zitieren


Lesezeichen