[アルゴリズム]大規模配列決定

マージソートやクイックソートソート大規模データに適しています。どちらも、パーティションのアイデアを使用しました。

マージソート

非常にシンプルなのマージソートの核となるアイデア、あなたは配列をソートしたい場合は、私たち最初の配列は、それぞれ、フロントとリアの両方の部分、その後、途中から前後に二つの部分に分かれて並べ替えた後、両方の部分が再び一緒に組み合わされてソートされます。分割ルールダウンステップによってこの工程は、より小さなサブ問題に全体のソートを解決します。

これは再帰的であるので、その次のように終了条件がある見つけます:

merge_sort(P ... R)=マージ(merge_sort(P ...中央)、merge_sort(中央+ 1 ... R)

ここでp>何の分解を継続しなかったとき= R、または、もし途中= // 2、==中央の1はもはや分解し続けたときに真ん中。

次のように再帰的な式を説明します。

 

 

 

 

 

DEFマージ(左:リスト、右:リスト) - > リスト:
    TEMP = リスト()
     場合は左[-1] <= 右の[0]:
        TEMP =左+ 戻り温度が
     あれば右の[-1] <= 左の[ 0]:
        TEMP =右側+ 左側
         戻り温度
    left_index = right_index = 0
     一方(左)left_index <LEN  right_index < LEN(右)
         場合に左[left_index < 右[right_index]:左[left_index])temp.append
            left_index  + = 1
        
            temp.append(右[right_index])
            right_index + = 1
     であれば left_index == LEN(左):
        温度 + = 右[right_index:]
     
        TEMP + = 左[left_index:]
     戻りTEMP
 DEF merge_sort(LI:リスト) - > リスト:
     場合 lenの(LI)<= 1 戻りのLi 
    中央 = lenは(LI)// 2  = merge_sort(LI [:中央]) = merge_sort(LI [中央:])
    リターン・マージ(左、右)

 

おすすめ

転載: www.cnblogs.com/guangluwutu/p/11807366.html