js实现快速排序算法

思路

假设有这么一个数组

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));
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值