标签:
插入排序,普通排序 一般 前端够用,样本容量小于1000,根本看不出性能问题
function insertion_sort(arr){ var len=arr.length; for(var j=1;j<len;j++){ var key=arr[j]; var i=j-1; while(i>=0&&arr[i]>key){ arr[i+1]=arr[i]; i=i-1; } arr[i+1]=key; } }
合并排序 merge_sort
function _merge(arr,p,q,r){ var leftArr=[]; var rightArr=[]; //left part length var n1=q-p+1; //right part length var n2=r-q; for(var i=0;i<n1;i++){ leftArr[i]=arr[p+i]; } for(var j=0;j<n2;j++){ rightArr[j]=arr[q+1+j]; } leftArr[n1]=Infinity; rightArr[n2]=Infinity; i=0; j=0; for(var k=p;k<r+1;k++){ if(leftArr[i]<=rightArr[j]){ arr[k]=leftArr[i]; i=i+1; }else{ arr[k]=rightArr[j]; j=j+1; } } } function merge_sort(arr,p,r){ if(typeof p==‘undefined‘){ p=0; } if(typeof r==‘undefined‘){ r=arr.length-1; } var q; if(p<r){ q=Math.floor((p+r)/2); merge_sort(arr,p,q); merge_sort(arr,q+1,r); _merge(arr,p,q,r); } }
快速排序 quicksort
function quick_sort(arr,begin,end) { if(begin<end){ mid=_partition(arr,begin,end); quick_sort(arr,begin,mid-1); quick_sort(arr,mid+1,end); } } function _partition(arr,begin,end){ var x=arr[end]; var i=begin; for(var j=i;j<=end-1;j++){ if(arr[j]<=x){ if(i!=j){ var temp=arr[j]; arr[j]=arr[i]; arr[i]=temp; } i=i+1; } } var temp=arr[i]; arr[i]=arr[end]; arr[end]=temp; return i; }
quick_sort nlgn 样本容量大于1000 可以考虑使用
虽然merge_sort 也是nlgn 但是对于10w+的样本,quick_sort 执行速度优于 merge_sort
样本容量 10w
quick_sort 15ms
merge_sort 30ms
insertion_sort 5000ms
可以看出 quick_sort 平均性能较好
结论是没有结论,一般前端json返回数据不会超过100个,所以用哪种都一样,个人觉得可以尝试起来,无害,node后端可以用这2个方法,相信也有算法库,只为学习,前端也有学算法的想法,这是极好的,欢迎指出bug,不足,以后考虑补图,可能更加形象生动,希望自己可以坚持理解 Introduction to Algorithm 的每一个算法,一起加油吧
项目地址:
https://github.com/horsefefe/introductionTo-Algorithm
3种sort:insertion_sort,merge_sort,quick_sort 插入排序 合并排序 快速排序
标签:
原文地址:http://www.cnblogs.com/horsefefe/p/5701155.html