第VI章 - クイックソート、マージソート

ビープ音ビープマイルマイルは、アドレスデータ構造を説明します。https://space.bilibili.com/356198029

:プロセスのアドレス説明するビデオhttps://www.bilibili.com/video/av75201323を

クイックソート

書式#include <iostreamの>
 使用して 名前空間はstdを、
ボイドクイック(INT []、INTINT )。
INTパーティション(INT []、INTINT )。
INT のmain()
{ 
    int型の配列[] = { 5526432129732637 }。

    INT LEN = はsizeof(配列)/ はsizeofINT ;)

    COUT << " 元の入力シーケンスを:   " ;
     のためのINT I = 0 Iは<LEN; I ++)// 出力プロ配列の 
        COUT <<配列[I] << " " ; 
    COUT << ENDL < < ENDL、
    クイックソート(アレイ、0 lenを、1。); // ソート関数の呼び出し 
    COUT << "   ----クイックソート結果---- " << ENDL;
     のためのINT I = 0 ; I <LEN。 ++ I 
        COUT <<配列[I] <<
" " ; 
    COUT << ENDL;
     戻り0 ; 
} ボイドクイック(INT A []、intは左、INT右)// 行高速アルゴリズム{
     IF(左< 右)
    { int型 pivotposは=パーティション(A、左、右); // ソート基準素子 
        クイックソート(左、pivotpos- 1。); // 基準要素分割されたブロック、再帰的な 
        クイックソート(pivotpos + 。1、右); // 分割ブロック要素の参照、再帰    } 
} int型 



        



パーティション(INT A []、intは左、INT右)// 分割アルゴリズム、コア
{
     INTピボット= A [左];
     ながら(<左から右へ)// 両端大会
    {
         一方(左<右&& A [右]> =ピボット)--right; // 各検査の開始部分の最後のビット
        IF(<右を左)[] = [右] ++左; // 参照小結合はより参照の左側に以下右ピボット以上説明
        しながら ++左([左] <=ピボット&& <左右); // 各部分を検査する初期開始から
        IF(左<右)右- ] = [左] A ; // 右側が左側ピボット説明より大きいながら結合基準において参照よりも大きいです
     }
    A [左] =ピボット; // 最終位置における基準要素、右へ、彼の左のそれよりも小さいことは彼のより大きい
    リターン左; 
}

マージソート

書式#include <iostreamの>
 使用して 名前空間はstdを、

ボイドマージ(INT []、INTINTINTINT [])。
// 归并排序划分过程
空隙マージ(int型 []、intは左、INT右、INT TEMPを[])
{ 
    場合(左< 右)
    { 
        int型ミッド=(左+右)>> 1 
        マージソート(左、中、温度); 
        マージソート(、ミッド + 1 、右、温度); 
        マージ(左、中、右、TEMP);
    } 
} 

// マージソートマージ処理
 // 配列添字範囲[左、中間]および[中間+ 1、右】順序付けられたシーケンスの順序付けられたシーケンスに合わせ
空隙マージ(int型 A []、INTは、左INTを MID、INT右、int型のTEMP [])
{ 
    int型 P0 = 0 ;
     int型 P1 =左、P2 = MID + 1 ;
     // P0第一補助アレイ点
     // P1点アレイに【左、中間]まず、P2点配列[中間+ 1、右]第
     //はソート開始、<上昇が小さい要素を置くために、>降順
    しばらく(P1 <P2 = MID && <= 右)
    { 
        IF([P1] < [P2])
            TEMP [P0 ++] = A [++ P1 ];
         
            TEMP [P0 ++] = A [P2 ++ ]; 
    } 
    /// /要素が残っている場合、に直接補助アレイ
    一方(P1 <= MID)
        TEMP [P0 ++] = [P1 ++ ];
     一方(P2 <= 右)
        TEMP [P0 ++] = [P2 ++ ];
     // 一時アレイ行、コピーする良いための要素
     // 注意配列aを左から、デフォルト値は0ではない、総左右+ 1素子要素。
    INT I = 0 ; I <+は左右1 ; ++ I)
        A [左 + I] =TEMP [I]; 
} 
int型のmain()
{ 
    int型の配列[] = { 552643212は9。 73であり26は37 };
     INT LEN = はsizeof(アレイ)/ はsizeofINT ) ; 
    COUT << " 元の入力シーケンス:   " ;
     のためのINT I = 0 ;私は<LEN; I ++)// 出力プロ配列の 
        COUT <<配列[I] << "" ; 
    COUT << ENDL << ENDL; 

    COUT << "   ----マージソート結果---- " << ENDL;
     INT * TEMP = 新しい新しい INT [LEN]; 
    マージ(アレイ、0、lenの1。、TEMP); // ソート関数の呼び出し
    のためにINT J = 0 ; J <lenを、J ++ 
        COUT <<配列[J] << " " ; 戻り0 ; 
}

     

 

おすすめ

転載: www.cnblogs.com/xwxz/p/11867812.html