思路:
- 每次先找到数组中间的那个值作为基准
- 把小于基准值的放在一个数组里,把大于等于基准值的放在另外一个数组里。注意:基准值就不要再跟自身相比了
- 把得到的两个数组再次递归调用。注意:不要忘了把基准值拼接在中间,想按从大到小呐就把大于基准值的那个数组拼接在最前面就好了
var arr = [1,5,32,6,3,6,43,2];
function quickSort(arr) {
if (arr.length <= 1) return arr;
var leftArr = [], //这个用于存放小于基准值的数组
rightArr = [], // 这个用于存放大于基准值的数组
middleIndex = Math.floor(arr.length / 2), // 找到中间的基准值的索引
middleValue = arr.splice(middleIndex,1)[0]; //得到中间基准值,顺便把当前基准值忽略掉,避免重复比较
for (var i = 0; i < arr.length; i++) {
if (arr[i] < middleValue) {
leftArr.push(arr[i]);
} else {
rightArr.push(arr[i]);
}
}
return quickSort(leftArr).concat(middleValue,quickSort(rightArr))
}
var res = quickSort(arr);
console.log(res); //[1, 2, 3, 5, 6, 6, 32, 43]