public static void quicksort(int [] inputSet, int start, int end) 
{ 
   int left = start; 
   int right = end; 
   int temp = 0; 
   // W pierwszej kolejności trzeba określić tak zwany element osiowy. 
   int pivotValue = inputSet[ (start+end)/2]; 
   // Następnie należy przygotować dane wejściowe: 
   // { zbiór mniejszy niż, element osiowy, zbiór większy niż }. 
   // Cały proces przedstawia się następująco: 
   // 0: początkowa lewa pozycja = start; początkowa prawa pozycja = koniec. 
   // 1: Rozpoczęcie od aktualniej lewej pozycji, znalezienie wartości większej niż elementu osiowego. 
   // Tę wartość nazwiemy A. 
   // 2: Rozpoczęcie od aktualnej prawej pozycji, znalezienie wartości mniejszej niż elementu osiowego.  
   // Tę wartość nazwiemy B. 
   // 3: Zamiana wartości A i B. Zwiększenie wartości lewej pozycji i zmniejszenie prawej. 
   // 4: Ponowne rozpoczęcie procedury począwszy od kroku 1. i jej powtarzanie do chwili,
   // gdy indeks lewej pozycji będzie równy lub większy indeksowi prawej pozycji. 
   // Następnie, dopóki lewy indeks jest mniejszy lub równy wartości prawego... 
   while (left<=right) 
   { 
      // ... wyszukujemy odpowiednią wartość A ... 
      while ( inputSet[left] < pivotValue ) 
      { 
         left++; 
      } 
      // ... następnie wyszukujemy odpowiednią wartość B ... 
      while ( inputSet[right] > pivotValue ) 
      { 
         right--; 
      } 
      // .. następnie przy założeniu, że left <= right, ... 
      if ( left <= right ) 
      { 
         // ... zamieniamy wartości A i B. 
         temp = inputSet[left]; 
         inputSet[left] = inputSet[right]; 
         inputSet[right] = temp; 
         // Ponadto, nie wolno zapomnieć o zwiększeniu left ... 
         left++; 
         // ... oraz zmniejszeniu right. Dzięki temu eliminujemy niebezpieczeństwo
         // ciągłego zamieniania tych samych wartości. 
         right--; 
      } 
   } 
   // Po ułożeniu danych wejściowych stosujemy sortowanie szybkie względem podzbioru
   // "mniejszy niż", o ile w zbiorze znajdują się co najmniej dwa elementy. 
   if ( start < right ) 
   { 
      quicksort(inputSet,start,right); 
   } 
   // Kolejny krok to zastosowanie sortowania szybkiego względem podzbioru 
   // "większy niż", o ile zawiera odpowiednią liczbę elementów. 
   if ( end > left ) 
   { 
      quicksort(inputSet,left,end); 
   }    
} 
