什么是归并排序 mergeSort
生活随笔
收集整理的這篇文章主要介紹了
什么是归并排序 mergeSort
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.什么是歸并排序?
歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。
作為一種典型的分而治之思想的算法應用,歸并排序的實現由兩種方法:
- 自上而下的遞歸(所有遞歸的方法都可以用迭代重寫,所以就有了第 2 種方法);
- 自下而上的迭代;
在《數據結構與算法 JavaScript 描述》中,作者給出了自下而上的迭代方法。但是對于遞歸法,作者卻認為:
However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle.
然而,在 JavaScript 中這種方式不太可行,因為這個算法的遞歸深度對它來講太深了。
和選擇排序一樣,歸并排序的性能不受輸入數據的影響,但表現比選擇排序好的多,因為始終都是 O(nlogn) 的時間復雜度。代價是需要額外的內存空間。
2. 算法步驟
歸并排序使用分而治之的概念對給定的元素列表進行排序。它將問題分解為較小的子問題,直到它們變得足夠簡單以至可以直接解決為止。
以下是歸并排序的步驟:
3. 動圖演示
代碼實現
將兩個已排序子數組合并為一個已排序數組的函數?merge()
function merge(left, right) {let arr = []// 如果任何一個數組為空,就退出循環while (left.length && right.length) {// 從左右子數組的最小元素中選擇較小的元素if (left[0] < right[0]) {arr.push(left.shift()) } else {arr.push(right.shift()) }}// 連接剩余的元素,防止沒有把兩個數組遍歷完整return [ ...arr, ...left, ...right ] }更完整的實現
function mergeSort(array) {const half = array.length / 2if(array.length < 2){return array }const left = array.splice(0, half)return merge(mergeSort(left),mergeSort(array)) }總結
以上是生活随笔為你收集整理的什么是归并排序 mergeSort的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python查找中国城市、省份
- 下一篇: java的mergesort函数_Mer