1.9.1 快速排序
顾名思义快速排序听起来虽然有点像概念性的东西,但是名字就代表了它本身。设想一个这样的场景:如果在你面前有一群刚出生不久生病的小狗狗,都有自己的挂号单,现在给你的任务就是按照单号给小狗排序,因为时间问题,所以要去无论什么办法,只要最快就行。这个时候也许快速排序能帮上你的忙!
1.9.2 核心
- 在排序之前选择一个值为游标(中间值)
- 所有小于游标的放在左侧,大于游标的放在右侧
- 左右两边分开的数据不断重复第一步、第二步,
直到里面只有一个值为止
假设刚刚狗狗的单号是这样子的
- 第一步选择8作为中间值(选择任何值都行,中间比较容易明白)
- 所有小于8的放在左侧,大于8的放在右侧
- 左右两边分开的数据不断重复第一步、第二步,直到里面只有一个值为止
1.9.3 使用javascript实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
</body>
<script>
const AR = {
arr: [3, 4, 6, 1, 2, 0, 8, 9, 5, 7, 22, 88, 23],
//快速排序
quickSort(arr) {
//直到分为单个时返回当前排好序的数组
if (arr.length <= 1) return arr;
// 获取前数组的中间值下标
const cursor = Math.floor(arr.length / 2);
// 获取数组的中间值
const [crrent, ] = arr.splice(cursor, 1);
// 左边的数组
const leftArr = [];
// 右边的数组
const rightArr = [];
// 以中间值为游标大的放右边小的放左边
arr.forEach(e => {
if (e < crrent) {
leftArr.push(e)
} else {
rightArr.push(e)
}
});
// 递归重复这个步骤最后就可以得到排好序的数组
return AR.quickSort(leftArr).concat([crrent], AR.quickSort(rightArr))
},
}
console.dir(AR.quickSort(AR.arr));
</script>
</html>
使用的时候直接调用就行了