首页 > 编程语言 > 详细

3种sort:insertion_sort,merge_sort,quick_sort 插入排序 合并排序 快速排序

时间:2016-07-24 18:00:22      阅读:368      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!