思路:
整体:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据小,然后按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终使数据变成有序数列。
1、在数据集中间,选择一个元素作为基准数key
2、所有小于基准数的元素都移到基准数的左边,所有大于基准数的元素都移到基准数的右边
3、对基准左右两边的两个子集不断重复上面两个步骤,直到所有子集都只剩下一个元素为止。
语法:
Math.floor():返回小于或等于一个给定数字的最大整数
concat():用于连接两个或多个数组,返回一个新数组
代码:
function quickSort(arr){
if(arr.length<=0){ //如果数组长度小于等于1,直接返回数组
return arr;
}
//选择基准数
var pivotIndex = Math.floor(arr.length/2); //确定基准数的index值
var pivot = arr.splice(pivotIndex,1)[0]; //确定基准数的值,并且数组失去这个基准值,长度减1
//定义两个空数组,用来存放一左一右两个子集
var left = [];
var right = [];
//遍历数组,小于基准数的放入左数组,大于基准数的放入右数组
for(var i=0;i<arr.length;i++){
if(arr[i]<=pivot){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
//使用递归不断重复上面的过程,得到排序后的结果
return quickSort(left).concat([pivot],quickSort(right));
}