次のように配列仕分け作業を完了することができる:
1
)Kを設定= kが要素よりも小さくなるように[0]、kは、適切な位置に移動され
、左側にはない権利におけるk k個のk個の要素よりも大きい、及びk等しいです関係
することができる現れるO n)が周りにk個の完了時間)
2)
クイックソートkの左側の一部
3)
高速kの右側の並べ替えの一部
/ * クイックソート、サブ問題に問題を分割するパーティションのアイデア * / の#include <iostreamの> 使用して 名前空間STD、 INT A [] = { 93、27、30、2、8、12は、2、8。、30、89 }; 無効クイックソート(INT A []、int型の S、INT ; E) 無効スワップ(INT&A、INT&B) { int型、TMP TMPを = Aと、= B; B = TMP。 } int型のmain() { int型のサイズ= はsizeof(A)/ はsizeof(INT )。 クイックソート(0、サイズ- 1 )。 以下のために(int型 i = 0 ; iは、サイズ<; iは++ ) COUTを << [I] << " " 。 coutの << てendl; リターン0 ; } ボイドクイックソート(int型 []、INTを S、int型E) { IF(S> = E)/ * 境界条件?* / リターン; INT K = A [S]; int型 I = S、J = E; ながら(私は< J)を { ながら(私は&& J [J]> = < K) { Jが - ; } スワップ( [I]、[J]); / * 最後の要素、I = J、スワップ(場合 [i]は、[j]は) 何もしないことと等価である* / しばらく(私は<&& J [I] <= K) { 私は ++ ; } スワップ([I]、[J])。 } //处理完后、[I] = K クイックソート(S、I - 1 )。 クイックソート(iは + 1 E)。 } // INT [] = {93,27,30,2,8,12,2,8,30,89}。