Gyorsrendezés C-ben

A Programozás Wiki wikiből
// két elem cseréje egy tömbben
// arr: a tömb
// i: az egyik elem indexe
// j: a másik elem indexe
void swap( int arr[], int i, int j ) {
   int tmp = arr[i];
   arr[i]  = arr[j];
   arr[j]  = tmp;
}

// vezérelem kiválasztás tömbrészből
// a kiválasztáson túl rendez is az elemeken
// arr: a feldolgozandó tömb
// low: a tömbrész alsó határa
// high: a tömbrész felső határa
int findpivot( int arr[], int low, int high ) {
   int pivot_index; // a vezérelem indexe
   int pivot; // a vezérelem értéke
   int i;
   // a vezérelem elmozgatása a tömb végére
   swap( arr, (low+high)/2, high );
   pivot = arr[high];
   // a vezérelemnél kisebbek mozgatása a tömb elejére
   pivot_index = low;
   for (i=low; i < high; ++i ) {
      if (arr[i] < pivot) {
         swap( arr, i, pivot_index );
         ++pivot_index;
      }
   }
   // a vezérelem mozgatása a helyére
   swap( arr, high, pivot_index );
   return pivot_index;
}

// tömbrész rendezése
// arr: a rendezendő tömb
// low: rendezendő terület alsó határa
// high: a rendezendő terület felső határa
void quicksort( int arr[], int low, int high ) {
   int pivot_index;
   if (low<high) {
      // rendezni csak legalább két elem esetén kell
      pivot_index = findpivot( arr, low, high );
      quicksort( arr, low, pivot_index-1 );
      quicksort( arr, pivot_index+1, high );
   }
}