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图为主,其实是为了让观众老爷们,能亲自手打代码,不做伸手侠。
若有什么错误,请立即指出,我会尽快修改,以免误导他人噢噢噢!