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