常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸併排序、快速排序、堆排序、基數排序等。這裏主要介紹
歸併排序
。算法
一圖勝千言:segmentfault
歸併排序是創建在歸併操做上的一種有效的排序算法。該算法是採用分治法(Divide and Conquer)的一個典型的應用。 合併排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分爲若干個子序列,每一個子序列是有序的。而後再把有序子序列合併爲總體有序序列。 將已有序的子序列合併,獲得徹底有序的序列;即先使每一個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱爲2-路歸併。數組
時間複雜度:O (nlogn)ide
空間複雜度:O (n)spa
function merge(leftArr, rightArr){ var result = []; while (leftArr.length > 0 && rightArr.length > 0){ if (leftArr[0] < rightArr[0]) result.push(leftArr.shift()); //把最小的最早取出,放到結果集中 else result.push(rightArr.shift()); } return result.concat(leftArr).concat(rightArr); //剩下的就是合併,這樣就排好序了 } function mergeSort(array){ if (array.length == 1) return array; var middle = Math.floor(array.length / 2); //求出中點 var left = array.slice(0, middle); //分割數組 var right = array.slice(middle); return merge(mergeSort(left), mergeSort(right)); //遞歸合併與排序 } var arr = mergeSort([32,12,56,78,76,45,36]); console.log(arr); // [12, 32, 36, 45, 56, 76, 78]