思路
假设有这么一个数组
let ary = [12, 8, 15, 16, 1, 24]
第一步
找到中间项15
--> 把它从原来数组中移除
--> 获取这一项的结果
第二步
让拿出来的每一项和中间项继续比较
并创建两个数组(左边数组和右边数组)
比中间项小的放到左边
比他大的放到右边
左边数组:
12,8,1
右边数组
16,24
重复上面的操作 再分别将左右两个数组再取中间项,再分成左右两个数组,比中间项小的放到左边,比他大的放到右边
…
代码实现
/*
* 实现插入排序的方法
* @params
* ary [ARRAY] 需要排序的数组
* @return
* [ARRAY]排序后的新数组
*/
function quick(ary){
// 4.结束递归(当ary中只有小于等于一项,则不用处理)
if(ary.length<=0){
return ary;
}
// 1.找到数组的中间项,在原有的数组中把它移除
let middleIndex = Math.floor(ary.length/2)
let middleValue = ary.splice(middleIndex, 1)[0]
// 2.准备左右两个数组,循环剩下数组中的每一项,比当前项小的放到左边数组中,反之放到右边数组中
let aryLeft = [],
aryRight = [];
for(let i=0;i<ary.1ength;i++){
let item = ary[i];
item<middleValue?aryLeft.push(item):aryRight.push(item);
}
// 3.递归方式让左右两边的数组持续这样处理,一直到左 右两边都排好序为止(最后让左边+中间+右边拼接成为最后的结果)
return quick(aryLeft).concat(middleValue, quick(aryRight));
}