- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 11

Thema: Quicksort Abbruchbedingung ?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    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
    Geändert von Siro (29.04.2011 um 14:41 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress