快速排序算法的简短描述

一个数组,比如:

[3,9,2,1,5,4]

取出某个元素(比如第一个元素3);

将除3之外的元素元素分为两组,小于(less than)等于(equal)3的为一组,[1,2],记为lt,大于(greater than)3的为一组[4,5,9] ,记为gt;

对lt 和 gt 重复上面的步骤——快速排序是一个递归过程(recursive);

将最终的结果合并。

用js来描述就是:

  // list that greater than n
  function listgt(list,n){
    return list.filter(function(m){
             return m > n;
           })
  }
  // eg.
  // 返回大于2的元素
  // -> [ 3, 9, 5, 4 ]
  // console.log(listgt([3,9,2,1,5,4],2));
  
  
  // list that less than or equal to n
  function listlet(list,n){
    return list.filter(function(m){
             return m <= n;
           })
  }
  // eg.
  // 返回比小于或等于2的元素
  // -> [ 2, 1 ]
  // console.log(listlet([3,9,2,1,5,4],2));
  
  function first(list){
    return list[0];
  }
  function rest(list){
    return list.slice(1);
  }
  
  function quicksort(list){
    if(list.length === 0){
      return [];
    }else{
      var n = first(list)
        , lt = listlet(rest(list),n)
        , gt = listgt(rest(list),n)
  
      // 递归 & 合并
      return [].concat(quicksort(lt)
                      ,n
                      ,quicksort(gt))
    }
  }
  console.log(quicksort([3,9,2,1,5,4]));
  // [ 1, 2, 3, 4, 5, 9 ]

 

转载于:https://www.cnblogs.com/wewe/p/3163974.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值