言語別のスレで質問するのもあれかなと思ったのでこちらで質問させていただきます

クイックソートについてです。
一つ選んで、それより小さいのと大きいのに分けて、それぞれでまた同じことを繰り返す、ここまでは理解しました
んでプログラミングしようとして(Cだったんですけど)、配列の真ん中を軸にして、左から軸より大きいのを探し、右から軸より小さいのを探し、あったら交換
右から進んでる方の配列番号が左からのものの番号より小さくなったら終了して再帰的に……

とのことなんですけど、この再帰に入るための条件のところがよく分かりません
そこまで行った段階で、軸より左側は全て軸より小さく、右側が軸より全て大きくなるのはなぜでしょう
左側にぽつんと軸より大きいのが残ってたりすることもあるような気がするのですが