在V8引擎中,sort函数只给出了两种排序insertSort和quickSort,数组长度小于等于22的用insertSort大于22的用quickSort
手写快速排序
时间复杂度 (nlogn)
1.递归新建数组版本
function quickSort(arr){
if(arr.length<=1) return arr;
let left=[];
let right=[];
let middle=Math.floor(arr.length/2);
var pivot=arr[middle];
for(var i=0,l=arr.length;i<l;i++){
if(i===middle) continue;
if(arr[i]<pivot){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat(pivot,quickSort(right));
}
var arr=[9,2,11,4,23,8,67];
console.log( quickSort(arr));
2.标准版本
function quickSort(arr,left,right){
var i=left=left?left:0;
var j=right=right?right:arr.length-1;
var middle=Math.floor((i+j)/2)
var pivot=arr[middle];
var tmp;
while(i<=j){
while(arr[j]>pivot) {j--};
while(arr[i]<pivot) {i++};
if(i<=j){
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
i++;
j--;
}
if(left<j){
quickSort(arr,left,j);
}
if(right>i){
quickSort(arr,i,right);
}
}
return arr;
}
var arr=[1,0,21,4,23,8,1];
console.log( quickSort(arr));
手写插入排序
function insertSort(arr){
var length=arr.length;
for(var i=1;i<length;i++){
var temp=arr[i];
var j=i;
while(arr[j-1]>temp&&j>0){
arr[j]=arr[j-1];
j--;
}
arr[j]=temp;
}
return arr;
}
var arr=[1,0,21,4,23,8,1];
console.log( insertSort(arr));