public static void quicksort(int [] inputSet, int start, int end) 
{ 
   int left = start; 
   int right = end; 
   int temp = 0; 
   // W pierwszej kolejnoci trzeba okreli tak zwany element osiowy. 
   int pivotValue = inputSet[ (start+end)/2]; 
   // Nastpnie naley przygotowa dane wejciowe: 
   // { zbir mniejszy ni, element osiowy, zbir wikszy ni }. 
   // Cay proces przedstawia si nastpujco: 
   // 0: pocztkowa lewa pozycja = start; pocztkowa prawa pozycja = koniec. 
   // 1: Rozpoczcie od aktualniej lewej pozycji, znalezienie wartoci wikszej ni elementu osiowego. 
   // T warto nazwiemy A. 
   // 2: Rozpoczcie od aktualnej prawej pozycji, znalezienie wartoci mniejszej ni elementu osiowego.  
   // T warto nazwiemy B. 
   // 3: Zamiana wartoci A i B. Zwikszenie wartoci lewej pozycji i zmniejszenie prawej. 
   // 4: Ponowne rozpoczcie procedury poczwszy od kroku 1. i jej powtarzanie do chwili,
   // gdy indeks lewej pozycji bdzie rwny lub wikszy indeksowi prawej pozycji. 
   // Nastpnie, dopki lewy indeks jest mniejszy lub rwny wartoci prawego... 
   while (left<=right) 
   { 
      // ... wyszukujemy odpowiedni warto A ... 
      while ( inputSet[left] < pivotValue ) 
      { 
         left++; 
      } 
      // ... nastpnie wyszukujemy odpowiedni warto B ... 
      while ( inputSet[right] > pivotValue ) 
      { 
         right--; 
      } 
      // .. nastpnie przy zaoeniu, e left <= right, ... 
      if ( left <= right ) 
      { 
         // ... zamieniamy wartoci A i B. 
         temp = inputSet[left]; 
         inputSet[left] = inputSet[right]; 
         inputSet[right] = temp; 
         // Ponadto, nie wolno zapomnie o zwikszeniu left ... 
         left++; 
         // ... oraz zmniejszeniu right. Dziki temu eliminujemy niebezpieczestwo
         // cigego zamieniania tych samych wartoci. 
         right--; 
      } 
   } 
   // Po uoeniu danych wejciowych stosujemy sortowanie szybkie wzgldem 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 wzgldem podzbioru 
   // "wikszy ni", o ile zawiera odpowiedni liczb elementw. 
   if ( end > left ) 
   { 
      quicksort(inputSet,left,end); 
   }    
} 
