JavaScript Advanced Sorting Algorithms - Hill Sort, Merge Sort, Quick Sort

1. Hill sort

Key point: selection of interval values

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

Second, merge sort

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;


	   }

3. Quick Sort

May cause stack overflow

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++) { //At this time, i starts from 1 and cannot contain the reference value
	   	  	if(arr[i]>pivot){
	   	  		greater.push(arr[i]);
	   	  	}else{
	   	  		lesser.push(arr[i]);
	   	  	}
	   	  }

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

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325812472&siteId=291194637