>>155
なんとかやりたいことは分かったと思う。
まずピポットの位置をfromに固定して、
ピポットより右〜toまでをピポットより小さい数を左に、大きい数を右にする。
で、並び終わったら、ピポットの数値をその間に入れたい、と。
コレの再帰による繰り返しでソートしたいように見える。

さてまず。
while(S[j]>S[pivot]){ j--; }
このループでiとjの大小を考えてないから、ループ回ってる間にiより小さくなって、
既に小さい順に並んでる数値を変なところと入れ替えてしまってる。

次に、ピポットをそれより小さい値の一番右とスワップするところだけど、
if(S[i]>S[pivot]){
これで、常にiがピポットより大きい値を指しているので、
そのままスワップすると、スワップ後にピポットより大きい値が左に来てしまう。

最後に、これはしっかり確かめたわけではないけど、
同じ大きさの数値が2つ以上存在する時のことが考えられて無いように見えた。