优点:快速排序的特点就是快,而且效率高。
缺点:需要另外声明俩个数组,浪费了内存空间
原理
- 先找到一个基准点(一般在数组的中部),然后把基准点从数组中取出,数组剩余元素依次与该基准点做对比,如果比它小,放左边,反之,放右边
- 左右分别用一个空数组去存储比较后的元素
- 最后递归上述操作,直到数组长度 <= 1
代码实现
const quickSort = arr => {
if ( arr.length <= 1 ) return arr
// 找基准点位置
let midIndex = Math.floor ( arr.length / 2 )
// 从数组中取出基准点
const valArr = arr.splice( midIndex, 1 )
const midVal = valArr[0]
let left = [ ]
let right = [ ]
// 遍历数组,进行分配
for ( let i = 0; i<arr.length; i++ ){
if ( arr[i] < midVal ) {
left.push(arr[i]) //比基准点小的放在左边数组
} else {
right.push(arr[i]) //比基准点大的放在右边数组
}
}
return quickSort( left ).concat(midVal, quickSort(right))
}
动画