码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-07-24 18:00:49      阅读:283      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!