一、希尔排序
重点:间隔值的选取
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)); }