标签:
插入排序,普通排序 一般 前端够用,样本容量小于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