Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

数组自带的sort方法效率低

  一般而言我们会很相信编程语言自带的一些功能,觉得那都是高手做出来的,一定比自己实现的好。但是偶尔也会碰上一些做的不好的。比如JavaScript中的sort方法的局限性就很大,它总是会将数据转到字符串类型后比较,所以传入非字符串类型就很慢。
<script>
//自己实现的排序
function sort(a){
  var s=[0,a.length-1],p=0,l,r,i,j,v;
  while(s.length>p){
    l=i=s[p++],r=j=s[p++],v=a[i];
    while(i<j){
      while(a[j]>=v&&i<j)j--;
      a[i]=a[j];
      while(a[i]<=v&&i<j)i++;
      a[j]=a[i];
    };
    a[i]=v;
    if(i-1>l)s.push(l,i-1);
    if(i+1<r)s.push(i+1,r);
  };
};
var s,i,t;
//使用自带的sort方法
for(i=0,s=[];i<1E5;i++)s.push(Math.random());
t=new Date;
s.sort();
console.log(new Date-t);
//使用自己实现的排序
for(i=0,s=[];i<1E5;i++)s.push(Math.random());
t=new Date;
sort(s);
console.log(new Date-t);
</script>

  上面的排序用QuickSort算法,但是由于JavaScript的调用堆栈空间很有限,没有使用递归实现。总之,自己实现的排序就是比浏览器提供的sort方法快。因为自带的sort方法总是将元素转成字符串后再比较,如果比较的数据是其它类型就需要使用回调函数(这里就不演示了),这会对性能造成影响。所以如果需要排序的字段是非字符串的就可以考虑用自己写的排序算法。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^