JavaScript快排与原生sort的测试

  今天工作室断网!果断回宿舍,不然各种资料都没有。(他说将来会找到!)不好意思,又哼起来了。进入主题,大家都知道,快排是各种排序算法中,最高效的也是应用最广的,还有更重要的一点,面试特别爱考的!

  其实大家或多或少都听说过快排,也就是先从取出一个基准值,然后再把其它的数与之相对比,小的放左边的集合里,大的放右边的集合里,再通过递归不断重复该步骤,实现最高效率的quickSort。

  Talk is cheap, show you my code!

排序结果我就不写出来啦,大家都会数大小,哈哈哈。


  刚说完JavaScript快排,突然想到,尼玛,Array.prototype.sort 不是有一个排序方法么?当然这个sort方法直接使用是有弊端的,像刚才那个数组,打印出来的结果可就是:

  嗯!坑爹的字符串排序!快速的说一下,sort函数是可以接收一个对比函数参数的,若返回负数则排在前面,返回正数排在后面。我们直接看最简单的那种对比函数!

  OK!升序什么的,完全可以啊!


  两种方法都出来了,本着选择困难症不能有的精神(装逼的时刻到了!),我们必须知道是快排速度快呢,还是原生数组对象的sort速度快。(这不废话嘛!原生优化过的肯定比自定义递归快啊!)。呃,那我们来看看快多少。

  测试环境:10000条随机0~10的数字进行排序。

  测试程序:

var arr = [];
/*一万条随机数*/
for(var n = 0; n < 10000; n++){
    arr.push(Math.round(Math.random()*10));
}

var text = function (fn, param) {
  var start, end;
  // 记录执行的起始时间
  start = new Date().getTime();
  // 执行待测试的方法
  arr.quickSort() 或 arr.sort(compare);
  // 记录执行的结束时间
  end = new Date().getTime();
  // 输出待测试方法所运行的结果和耗时
  console.log("排序完成,耗时" + (end - start) + "毫秒" );
}

text();

 

 

先是quickSort排序的测试:使用arr.quickSort()

大致在2250ms附近波动的,10K条数据排序,2S。

再到原生sort排序方法测试:使用arr.sort(compare)

10ms.....

230倍的差距!

大家乖乖用sort吧,无非写一个compare函数嘛,多大点事儿!


哈哈哈,今天早上断网,就自己捣腾弄了些这个,晚上发一下。

最近我的blog的重要的代码都会以PO图为主,其实是为了让观众老爷们,能亲自手打代码,不做伸手侠。

若有什么错误,请立即指出,我会尽快修改,以免误导他人噢噢噢!

posted @ 2014-11-28 22:59  Yika丶J  阅读(2901)  评论(5编辑  收藏  举报