归并排序

2017-06-06  本文已影响8人  mengxr

背景


归并排序

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. 相同价格则按照竞标顺位(即价格提交时间)进行正排序。
   排序若是在前端进行,那么采用快速排序的浏览器中显示的中标者很可能是不符合预期的
上一篇 下一篇

猜你喜欢

热点阅读