Nel frammento di codice sottostante viene presentato l’algoritmo di ordinamento Heap Sort in versione ricorsiva e randomica.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

void stampa(int *a, int n);
void quickSort(int *a, int n);

int main(void) {
  int a[10] = {5, 1, 3, 99, 45, 63, 21, 34, 0, 84}; // elementi da ordinare
  int n = 10;  // numero di elementi

  stampa(a, n);
  quickSort(a, n);
  stampa(a, n);

  return 1;
}

// stampo tutti i valori presenti nel vettore
void stampa(int *a, int n) {
  int i;

  for(i=0; i<n; i++)
    printf("%d ", a[i]);

  printf("\n");
}

// passo alla funzione il puntatore al vettore da ordinare e la sua dimensione
void quickSort(int *a, int n) {
  int *a1 = NULL, *a2 = NULL;  // definisco i due sotto-vettori
  int a1_n = 0, a2_n = 0;      // definisco la dimensione dei due sotto-vettori
  int i, k, val;
  time_t t;
  
  if(n<2)
    return;

  srand((unsigned) time(&t));
  k = rand()%(n-1);  // definisco il valore di k
  val = a[k];        // estraggo il valore con indice k da a[]

  // scorro tutto l'array
  for(i=0; i<n; i++) {
    if(a[i]<=val && i!=k) {                    // se il valore in questione è minore o uguale di a[k]
      a1 = realloc(a1, sizeof(int)*(a1_n+1));
      if(a1==NULL) {
        exit(1);
      }
      a1[a1_n] = a[i];
      a1_n++;  // conto i valori presenti nell'array a1
    }
    else if(i!=k){                             // se il valore in questione è maggiore di a[k]
      a2 = realloc(a2, sizeof(int)*(a2_n+1));
      if(a2==NULL) {
        exit(1);
      }
      a2[a2_n] = a[i];
      a2_n++;  // conto i valori presenti nell'array a2
    }
 }

  // richiamo ricorsivamente le funzioni
  quickSort(a1, a1_n);
  quickSort(a2, a2_n);

  // concateno i due vettori e il valore a[k] nel vettore a
  memcpy(a, a1, a1_n*sizeof(int));            // copio la prima metà dell'array (i valori <= a[k])
  a[a1_n]=val;                                // copio il vaore a[k]
  memcpy(&a[a1_n+1], a2,  a2_n*sizeof(int));  // copio la seconda metà dell'array (i valore > a[k])

  free(a1);
  free(a2);
}

Per maggiori informazioni circa la sintassi del linguaggio si faccia riferimento alla guida al Linguaggio C.