快速排列实现思路--将数组取出中间数后分割为左右两部分进行比较,比较后再次将左右两个数组重复第一个数组的操作,直至分到每个数组只有一个,然后按照顺序进行数组拼接。具体步骤如下:
1.将数组中间位置的元素从数组中提出(从数组中删除) splice() 返回被删除的项
arr.splice(parseInt(arr.length / 2), 1)[0];
parseInt(arr.length / 2):求出最中间的下标值;
arr.splice(parseInt(arr.length / 2), 1):求出追中间的数,但此时虽为一个值,但仍是数组模式,所以加【0】取出;
arr.splice(parseInt(arr.length / 2), 1)[0]:为最终取出等中间数的值。
2.声明两个空数组left,right
3.所有的数组元素和提取的中间值比较,比中间值大的放right,小的放left
4.将left ,中间值,right组合到一个数组中,完成一次排序 concat()
5.left,right数组再进行重复的操作,直到只有一个元素或者没有数组元素停止
6.在控制台输出查看
代码如下:
<script>
var arr = [1, 9, 2, 0, 3, 7, 4, 8, 6, 5];
// 创建分割排列函数
function fun(arr) {
// 5.添加判断条件 注意if语句的位置
if (arr.length <= 1) {
return arr;
}
// 1.取出中间数
var z = arr.splice(parseInt(arr.length / 2), 1)[0];
// 2.定义左右空数组
var left = [], right = [];
for (var i = 0; i < arr.length; i++) {
// 3.判断值的大小,比中间数小的放左数组,比中间数大的放右数组
if (arr[i] >= z) {
right.push(arr[i]);
} else {
left.push(arr[i]);
}
}
// 4.返回函数 left,right数组再进行重复的操作 使用concate将左右函数及中间数进行拼接
return fun(left).concat(z, fun(right));
}
// 6.在控制台输出
console.log(fun(arr));
</script>