首頁 > web前端 > js教程 > Javascript排序演算法之合併排序(歸併排序)的2個例子_基礎知識

Javascript排序演算法之合併排序(歸併排序)的2個例子_基礎知識

WBOY
發布: 2016-05-16 16:53:12
原創
1122 人瀏覽過

歸併排序(Merge sort)是建立在歸併操作上的一種有效的排序演算法。此演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。

歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分成若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。

歸併排序是建立在歸併操作上的一種有效的排序演算法。此演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱為2-路歸併。

歸併操作的過程如下:

1.申請空間,使其大小為兩個已經排序序列總和,該空間用來存放合併後的序列
2.設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
3.比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指針到下一位置
4.重複步驟3直到某一指針達到序列尾
5.將另一個序列剩下的所有元素直接複製到合併序列尾

範例1:

複製程式碼 程式碼如下:

/**
 * 合併運算(merge),也叫合併演算法,指的是將兩個已經排序的序列合併成一個序列的運算。
 * 合併排序演算法依賴合併運算。
 *
 * 合併作業的過程如下:
 *
 * 1、申請空間,使其大小為兩個已排序序列之和,該空間用來存放合併後的序列
 * 2、設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
 * 3、比較兩個指針所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一個位置
 * 4、重複步驟3直到某一指標達到序列尾
 * 5、將另一序列剩下的所有元素直接複製到合併序列尾
 *
*/


/***/
🎜>function mergeSort(items) {
    if (items.length         return items;
,
        left = items.slice(0, middle),
        right = items.slice(middle),
    right = items.slice(middle),
   >
params.unshift(0, items.length);
    items.splice.apply(items, params);

    return itemsms

>        var result = [],
            il = 0,
      left.length && ir             if (left[il ]                 result.push(left[il ]);
         result.push(right[ir ]);
            }
        }
        return result.concat(left.slice(il)) .concat(right.slice(ir));
    }
}

// test  }
}

// test  }
}

// test arr 1, 3, 12, 5, 66, 23, 87, 15, 32];

mergeSort(arr);

範例2:

程式碼如下:




來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板