/** Funktion: Quick-Sort, Sortieren durch Teilen und Rekursion
    Applikation ohne Oberfläche, läuft in der Dos-Box:  "java quick"
    @author  DG1XPZ
    @version JDK131
*/
class quick{

  static int[] z={9,5,8,6,3,7,4,0,1,2};  //Array "zahlen" deklarieren und befüllen

  public static void main(String[] vArgs){
    quick q = new quick();               //Instanz von der Klasse "bubble" erzeugen
    q.sort(z);  //Feld "zahlen" sortieren
    System.out.println(q.toString());  //Feld "zahlen" ausgeben
  }

  /** Funktion: Sortieren eines Arrays nach der Quick-Sort-Methode
      @param array Das zu sortierende 1-Dimensionale Array
      @return      Rückgabe des sortierten Arrays
  */
  public int[] sort(int[] zahlen){
    z=zahlen;
    qSort(0,z.length-1);
    return z;  //Rückgabe des sortierten Arrays
  }//public int[] sort(int[] z)

  /** Funktion: Sortieren eines Arrays nach der Quick-Sort-Methode
      @param Start linke Grenze des zu sortierenden Teilbereichs
      @param Ende  rechte Grenze des zu sortierenden Teilbereichs
  */
  private void qSort(int l,int r){
    if (r>l){
      int v=z[r];
      int i=l-1;
      int j=r;
      int t=0;
      do{
        do{
          i=i+1;
        }while(z[i]<v);
        do{
          j=j-1;
        }while(z[j]>v && j!=0);
        t=z[i];
        z[i]=z[j];
        z[j]=t;
      } while(j>i);
      z[j]=z[i];
      z[i]=z[r];
      z[r]=t;
      qSort(l,i-1);
      qSort(i+1,r);
    }
  }//private void qSort(int l,int r){


  /** Funktion: Den Inhalt eines 1-Dimensionalen Arrays zu einem String zusammenfügen
      @return      Rückgabe des zusammengefügten Strings
  */
  public String toString(){
    String s="";
    for(int i=0;i<z.length;i++){
      s=s+z[i]+",";//sortierte Zahlen zum String hinzufügen + Komma
    }
    s=s+"\n";           //Zeilenumbruch hinzufügen
    return s;           //Rückgabe des zusammengefügten Strings
  }//publice String toString()

}//class quick
