ary1 = [[2, 5, 9], [5, 5, 6], [2, 6, 8], [2, 5, 7]]
ary2 = [[2, 9, 5], [5, 6, 5], [8, 6, 2], [7, 2, 5]]

# 最大値の小さい順
p ary1.sort{|a, b| a.max <=> b.max}
p ary2.sort{|a, b| a.max <=> b.max}
p ''
# 最大値の大きい順
p ary1.sort{|a, b| b.max <=> a.max}
p ary2.sort{|a, b| b.max <=> a.max}
p ''
# 最小値の小さい順
p ary1.sort{|a, b| a.min <=> b.min}
p ary2.sort{|a, b| a.min <=> b.min}
p ''
# 最小値の大きい順
p ary1.sort{|a, b| b.min <=> a.min}
p ary2.sort{|a, b| b.min <=> a.min}

出力結果
[[5, 5, 6], [2, 5, 7], [2, 6, 8], [2, 5, 9]]
[[5, 6, 5], [7, 2, 5], [8, 6, 2], [2, 9, 5]]
""
[[2, 5, 9], [2, 6, 8], [2, 5, 7], [5, 5, 6]]
[[2, 9, 5], [8, 6, 2], [7, 2, 5], [5, 6, 5]]
""
[[2, 5, 9], [2, 5, 7], [2, 6, 8], [5, 5, 6]]
[[2, 9, 5], [7, 2, 5], [8, 6, 2], [5, 6, 5]]
""
[[5, 5, 6], [2, 6, 8], [2, 5, 9], [2, 5, 7]]
[[5, 6, 5], [8, 6, 2], [2, 9, 5], [7, 2, 5]]

四つ目が(たまたまかもしれませんが)[2, 6, 8], [2, 5, 9], [2, 5, 7]の順となっているのに、
三つめが[2, 5, 9], [2, 5, 7], [2, 6, 8]の順となっています。

そこで質問なのですが、
ブロックの部分を
a.min <=> b.min
から
b.min <=> a.min
と逆にしても得られる結果は
ちょうど逆の並びにならない理由を教えてください。
また、三つめの例で
最小値が同じ場合は、次に小さいもの同士を比べ、小さい順に並べ
さらに同じ場合は、その次に小さいもの同士を比べ、小さい順に並べる

ようにするにはどうすればいいですか?

(追記)
三つめの例を
最小値が同じ場合は、次に小さいもの同士を比べ、小さい順に並べ
さらに同じ場合は、その次に小さいもの同士を比べ、小さい順に並べる

ようにする簡単な方法はあるようですが、
一つ目の例を
最大値が同じ場合は、次に大きいもの同士を比べ、小さい順に並べ
さらに同じ場合は、その次に大きいもの同士を比べ、小さい順に並べる

また二つ目の例を
最大値が同じ場合は、次に大きいもの同士を比べ、大きい順に並べ
さらに同じ場合は、その次に大きいもの同士を比べ、大きい順に並べる

さらに四つ目の例を
最小値が同じ場合は、次に小さいもの同士を比べ、大きい順に並べ
さらに同じ場合は、その次に小さいもの同士を比べ、大きい順に並べる

ようにする簡単な方法はあるのでしょうか?