「プログラミング・アルゴリズムとアルゴリズムの(ⅱ)の基礎」「分割の5週目と」クイックソートを征服

次のように配列仕分け作業を完了することができる:
1
)Kを設定= kが要素よりも小さくなるように[0]、kは、適切な位置に移動され
、左側にはない権利におけるk k個のk個の要素よりも大きい、及びk等しいです関係
することができる現れるO n)が周りにk個の完了時間)
2)
クイックソートkの左側の一部
3)
高速kの右側の並べ替えの一部

/ * 
クイックソート、サブ問題に問題を分割するパーティションのアイデア
* / 
の#include <iostreamの>
 使用して 名前空間STD、

INT A [] = { 9327302812は28。3089 };
 無効クイックソート(INT A []、int型の S、INT ; E)
 無効スワップ(INT&A、INTB)
{ 
    int型、TMP 
    TMPを = Aと、= B; 
    B = TMP。
} 
int型のmain()
{ 
    int型のサイズ= はsizeof(A)/ はsizeofINT )。
    クイックソート(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}。

 

おすすめ

転載: www.cnblogs.com/focus-z/p/11567058.html