Ja.
Weil l und r die Positionen von zwei Zahlen sind, die vertauscht werden müssen. Wieso sie das sind, ergibt sich aus den beiden while-Schleifen davor. l und r laufen aufeinander zu. Dabei bleibt l stehen, wenn der Wert an der Position l nicht kleiner als das Vergleichselement ist, und r bleibt stehen, wenn der Wert an der Position r nicht größer als das Vergleichselement ist.
Daher gilt nach den while-Schleifen: A[l] >= Vergleichswert >= A[r]. Darum wird getauscht.
Naja, nachdem sich l und r begegnet sind, sind wir ja noch nicht fertig. Wir wissen nur, alles was links von l steht, ist kleiner als der Vergleichswert, und alles was rechts von r steht, ist größer als der Vergleichswert. Also werden beide Unterbereiche nochmal sortiert. Das geht üblicherweise solange, bis die Bereiche so klein geworden sind, dass die Sortierung trivial wird (2 Werte oder weniger).