采用二分法,取出中间数,数组每次和中间数比较,小的放到左边,大的放到右边
<script>
var arr = [3, 1, 4, 6, 5, 7, 2];
function quickSort(arr) {
if (arr.length == 0) {
return []; // 返回空数组
}
// 获取中间数
var cIndex = Math.floor(arr.length / 2);
// console.log(arr.length / 2);
var c = arr.splice(cIndex, 1);
var l = [];
var r = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < c) {
// 中间数的左侧
l.push(arr[i]);
} else {
// 中间数的右侧
r.push(arr[i]);
}
}
// 这个递归
return quickSort(l).concat(c, quickSort(r));
}
// 调用函数
let res = quickSort(arr);
console.log(res);
//结果为[1,2,3,4,5,6,7]
</script>
从中间数为2往上一层走就是[2]+3就是[2,3]一直往上走就是[1,2,3,4,5,6,7]