Noch zu Deiner Frage:
if(len<2) return;
ohne Rückgabewert wird kein Rückgabewert zurückgegeben
D.h. return; /* ohne return 0; oder return 1; oder return ret_variable; */
ist keine Rückgabe eines Wertes.
Es ist lediglich so, daß die PROZEDUR - oder void Funktion "sort" - (void bedeutet "kein Wert" bzw. "undefiniert" bzw. "nichts vorhanden") VORZEITIG verlassen wird. Es passiert nichts anderes, als daß die Rücksprungadresse (vom Stack) geladen wird und zur aufrufenden Funktion zurückverzweigt wird. Jedoch wird KEIN Rückgabewert bereitgestellt - es handelt sich eben um eine void Funktion (semantisch = bedeutungsmäßig eine Prozedur).