快速排序的思路:
1. 从数组中随机选择一项作为基准项
2. 遍历数组,将>基准项的放到基准项右边,<=基准项的放到其左边
3. 将左右新的数组重复步骤1、2,知道只有一项为止
var a=[555,68,88,34,10,23,44,54,6,122,58,50,400,324,8,1];
function quickSort(a) {
var length=a.length;
var index=0;//取第0项为基准项
var left=[],right=[];
if(length<=1){
return a;
}else{
//由于基准项是第0项,此处处理起来比较简单
for(var i=1;i<length;i++){
a[i]>a[index]?right.push(a[i]):left.push(a[i]);
}
return quickSort(left).concat(a[index]).concat(quickSort(right));
}
}
console.log(quickSort(a));
结果为:[ 1, 6, 8, 10, 23, 34, 44, 50, 54, 58, 68, 88, 122, 324, 400, 555 ]
取中间项作为基准项:
function quickSort1(a) {
var length=a.length;
var mid=Math.floor(length/2);
var left=[],right=[];
if(length<=1){
return a;
}else{
for(var i=0;i<length;i++){
if(i!=mid){
a[i]>a[mid]?right.push(a[i]):left.push(a[i]);
}
}
return quickSort(left).concat(a[mid]).concat(quickSort(right));
}
}