javascript高级排序算法-希尔排序、归并排序、快速排序

一、希尔排序

重点:间隔值的选取

 function shellsort(arr,gap) {
	       	
	   for(var g=0;g<gap.length;g++){

	   	for (var i = gap[g]; i < arr.length; i++) {
	   		var temp=arr[i];

	   		for(var j=i;j>=gap[g] && arr[j-gap[g]]>=temp;j=j-gap[g]){

	   			arr[j]=arr[j-gap[g]];
	   		}

	   		// var j=i;
	   		// while(j>=gap[g] && arr[j-gap[g]]>=temp){
	   		// 	arr[j]=arr[j-gap[g]];
	   		// 	j-=gap[g];
	   		// }

	   		arr[j]=temp;   				
	   	 }
	   }
	   	return arr;
}

二、归并排序

 function mergesort(arr) {
	   		if (arr.length<2) { return;} 
	   		var step=1;
	   		var left,right;
	   		while(step<arr.length){
	   			left=0;
	   			right=step;
	   			while(right+step<=arr.length){
	   				mergeArray(arr,left,left+step,right,right+step);
	   				left=right+step;
	   				right=left+step;
	   			}
	   			if(right<arr.length){
	   				mergeArray(arr,left,left+step,right,arr.length);
	   			}
	   			step*=2;

	   			// console.log(step);

	   		}

	   		return arr;


	   }

三、快速排序

可能会造成栈溢出

 function qSort(arr) {
	   	  if (arr.length ==0)  return [];
	   	  var lesser=[];
	   	  var greater=[];
	   	  var pivot=arr[0];
	   	  var len=arr.length;
	   	  for (var i = 1; i < len; i++) {              //此时i从1开始,不能包含基准值
	   	  	if(arr[i]>pivot){
	   	  		greater.push(arr[i]);
	   	  	}else{
	   	  		lesser.push(arr[i]);
	   	  	}
	   	  }

	   	  return qSort(lesser).concat(pivot,qSort(greater));
	   	  		   	  
	   }

猜你喜欢

转载自blog.csdn.net/qq_33745501/article/details/79541124
今日推荐