マージソートは、マージ操作に基づいて効果的なソートアルゴリズムです。このアルゴリズムは、Divide and Conquerの非常に典型的なアプリケーションです。
マージソートメソッドは、2つの(または2つ以上)順序付けられたテーブルを新しい秩序化されたテーブルにマージすることです。つまり、シーケンスをいくつかのサブシーケンスに分割します。各サブシーケンスが順序付けられます。次に、順序付けられたサブシーケンスが全体的な順序付きシーケンスに結合されます。
マージソートは、マージ操作に基づいて効果的なソートアルゴリズムです。このアルゴリズムは、Divide and Conquerの非常に典型的なアプリケーションです。順序付けられたサブシーケンスをマージして、完全に順序付けられたシーケンスを取得します。 2つの順序付けられたテーブルが1つの順序テーブルにマージされている場合、2ウェイマージと呼ばれます。
マージ操作プロセスは次のとおりです。
1.そのサイズが2つのソートされたシーケンスの合計であるようにスペースを適用します。これは、マージされたシーケンスを保存するために使用されます
2。2つのポインターを設定すると、初期位置はそれぞれ2つのソートされたシーケンスの開始位置です
3. 2つのポインターで指された要素を比較し、比較的小さな要素を選択してマージスペースに入れ、ポインターを次の位置に移動します
4.ポインターがシーケンスの端に達するまでステップ3を繰り返します
5.別のシーケンスの残りの要素をすべてコピーして、マージシーケンスの最後に直接コピーします
例1:
コードコピーは次のとおりです。
/**
*マージアルゴリズムとも呼ばれるマージは、2つのソートされたシーケンスを1つのシーケンスに組み合わせる操作を指します。
*マージソートアルゴリズムは、マージ操作に依存します。
*
*マージ操作プロセスは次のとおりです。
*
* 1。そのサイズが2つのソートされたシーケンスの合計であるようにスペースを適用します。これは、マージされたシーケンスを保存するために使用されます
* 2。2つのポインターを設定すると、初期位置はそれぞれ2つのソートされたシーケンスの開始位置です
* 3。2つのポインターが指す要素を比較し、比較的小さな要素を選択してマージスペースに入れ、ポインターを次の位置に移動します
* 4。ポインターがシーケンスの終わりに達するまでステップ3を繰り返します
* 5。別のシーケンスの残りの要素をすべてコピーして、マージされたシーケンスの最後に直接コピーします
*
*/
function mergesort(items){
if(items.length <2){
返品アイテム。
}
var middle = math.floor(items.length / 2)、
left = items.slice(0、中央)、
right = items.slice(中央)、
params = merge(mergesort(左)、mergesort(右));
params.unshift(0、items.length);
items.splice.apply(items、params);
返品アイテム。
関数マージ(左、右){
var result = []、
IL = 0、
IR = 0;
while(il <left.length && ir <right.length){
if(left [il] <右[ir]){
result.push(左[il ++]);
} それ以外 {
result.push(右[ir ++]);
}
}
return result.concat(left.slice(il)).concat(right.slice(ir));
}
}
// テスト
var arr = [2、1、3、12、5、66、23、87、15、32];
mergesort(arr);
例2:
コードコピーは次のとおりです。
<script type = "text/javascript">
//document.write("------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------- ----------------------------------------);
// var array = new Array(12、25、32、16、18、27、59、69、36);
var count = 0;
//ソートメソッドを呼び出してソートします
// msort(array、array、0、array.length -1);
//ソースソース配列
// Dest Target Array
// sサブスクリプトを開始します
// ttarget subscript
関数msort(source、dest、s、t){
var result = "";
var m;
var dest2 = new Array();
if(s == t){
dest [s] = source [s];
}
それ以外 {
m = math.floor((s + t) / 2);
msort(source、dest2、s、m);
msort(source、dest2、m+1、t);
マージ(Dest2、Dest、S、M、T);
/*出力結果*/
結果 += "<br />スレッド" +++ count +"パスの順序付けの結果は次のとおりです。
for(var n = 0; n <dest.length; n ++){
result + = array [n] + "、";
}
/*出力結果が終了します*/
}
返品結果;
}
/*出力結果が終了します*/
// 2つの配列を小さいものから大規模に順に融合しました
//元の配列をソース
// Dest Sorted Array
// sthe first subscript
// M次のアレイの次の表
// ntotal長
関数マージ(Source、Dest、S、M、N){
for(var j = m+1、k = s; j <= n && s <= m; k ++){
if(source [s] <source [j]){
dest [k] = source [s ++];
}
それ以外 {
dest [k] = source [j ++];
}
}
//残りの順序付けられた配列をDESTの終わりに追加します
if(s <= m){
for(var l = 0; l <= m -s; l ++){
dest [k + l] = source [s + l];
}
}
if(j <= n){
for(var l = 0; l <= n -j; l ++){
dest [k + l] = source [j + l];
}
}
}
//document.write("<br /> <br /> ")
</script>