背景
- Array.prototype.sort的實現,不同瀏覽器有不同的算法實現
- chrome使用的快排
- Firefox使用的歸并排序
歸并排序
- 是一種穩定的排序算法O(nlogn)
- 核心原理
- 有效的排列兩個有序數組
- [5,4,1,22]&&[12,32,45,21]
var tmp = [];
var left = [5,4,1,22];
var right = [12,32,45,21];
//對兩個有序數組的第一個進行大小比較
//將小的推入tmp,并在原數組中刪除
//這樣的結果是在進行2*length比較之前就有一個數組長度為0,跳出比較
//tmp中存在的是有序的小值
//長度不為0的數組中還存在的是有序的大值
//將兩者合并返回新的有序數組
while(left.length && right.length){
if(left[0]<right[0]){
tmp.push(left.shilf());
} else {
tmp.push(right.shift());
}
}
return tmp.concat(left, right)
function merge(left, right) {
var tmp = [];
while (left.length && right.length) {
if (left[0] < right[0])
tmp.push(left.shift());
else
tmp.push(right.shift());
}
return tmp.concat(left, right);
}
function mergeSort(a) {
if (a.length === 1)
return a;
var mid = ~~(a.length / 2)
, left = a.slice(0, mid)
, right = a.slice(mid);
return merge(mergeSort(left), mergeSort(right));
}
快速排序
穩定算法VS不穩定算法
- 什么是算法穩定性
- 兩個相等的數,排序前排序后前后位置不變
- 穩定算法
- 冒泡排序
- 歸并排序
- 不穩定算法
- 快速排序
- 選擇排序
- 不穩定算法出現問題場景
某市的機動車牌照拍賣系統,最終中標的規則為:
1. 按價格進行倒排序;
2. 相同價格則按照競標順位(即價格提交時間)進行正排序。
排序若是在前端進行,那么采用快速排序的瀏覽器中顯示的中標者很可能是不符合預期的
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。