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));
	   	  		   	  
	   }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章