快排

https://www.jianshu.com/p/7631d95fdb0b

×
广告
广告

理解快速排序算法

    <!-- 作者区域 -->
    <div class="author">
      <a class="avatar" href="/u/54af454d8fd9">
        ![96](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQuamlhbnNodS5pby91c2Vycy91cGxvYWRfYXZhdGFycy8xMDA5NDgzNi9hOGQxMDVjYy1lZmIxLTQ1N2EtYWQ0Ni01YTRlY2Q5YmQ5Y2QuanBn)


_Phine






0.4


2018.01.17 22:23*
字数 1568
阅读 4786 评论 2



    <!-- 文章内容 -->
    <div data-note-content="" class="show-content">
      <div class="show-content-free">
        <p>快速排序的时间复杂度为O(nlogn),空间复杂度为O(n)。根据<a href="https://link.jianshu.com?t=https%3A%2F%2Fzhuanlan.zhihu.com%2Fpeople%2Fcaspar-zhang" target="_blank" rel="nofollow">@张小牛</a> 的文章<a href="https://link.jianshu.com?t=https%3A%2F%2Fzhuanlan.zhihu.com%2Fp%2F22150349" target="_blank" rel="nofollow">快速排序(Quick Sort)详解</a>,证明最优的排序算法,其时间复杂度可为O(nlogn),对应的空间复杂度可为O(n)。快速排序可实现理论最优效率,这可能是快速排序比较重要的原因吧。</p>

我们基于Python学习写一下快速排序吧。

先给定一个长度为10的列表data = [5, 4, 7, 8, 2, 7, 8, 5, 6, 3],如下:

![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi0wZTFiZGM4ZmNlMWRjMGRmLnBuZw)
初始列表

有了一个列表,看起来会直观多了吧,但是我们想放着不管。快速排序的主旨很简单:找一个标杆数,称为X,然后根据X把数组的数分堆,小于X的全放左边,大于X的全放右边,就可以啦。对于实际情况呢,我们还需要考虑等于X的情况,我将其与小于归为一起,即数组排列后,形成“小于等于X” + “大于X”两部分。

就是说,快速排序的主要步骤就是:找X + 跟X比大小排列?

你可能会疑惑,只是按“比X大或比X小”排列数组,怎么能得到完整的排序呢。一次排列几乎不可能排好,但我们可以将排了一次的数组上,切分为“小于等于X”和“大于X”两块,再对这两块分别再找标杆数X'和X'',接着再分别排序。最后组合再一起,就得到了排列了两次的数组,其顺序肯定更接近完美序列。那么我们继续这么“切分→找标杆数→排列”操作下去呢?在此例中,由于每一分堆总小于右侧的分堆,而大于左侧的分堆,同时每个分堆内部已排好序,因此整个序列排序完成。

以上这种操作叫做“递归”,可以对数组不断地切分并采用同样的排列模式进行排列,直到递归条件不再满足,则停止递归。在这里,我们选择切分后数组的长度大小,作为递归的条件,细节在后面详述。

我们不妨先试着试验一下,找X,然后将数组跟X比大小排列。我没有研究哪一个当标杆好,不如就选第一个数字吧。

![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi03ZjA5YmY1ZmVkMTI2OGFlLnBuZw)
选择第一个数字为“标杆数”

下面我们就要依据“标杆数”,也就是数字“5”(其序数为0),对其余部分进行分堆了。我们想分为“<=5”与“>5”的两部分,并使前者位于左侧,后者位于右侧,操作步骤如下:

1. 命名左侧序数为 i,初始 i = 1;命名右侧序数为 j,初始 j = len(data)-1(即最后一位)。

![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi04MjFmZjUxYjFkNzVkNzQ4LnBuZw)
初始化i、j

2. 让j开始移动并进行判断:

  • 若j所在的数字<=5,则让i开始向右移动,直到i所在的数字>5,接着交换data中i, j所对应的数字,即:
data[i], data[j] = data[j], data[i]
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi04NWUyOGE4MDkzOTk5MGVmLnBuZw)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi00ZGMwZTcyN2QyYmU0OGFiLnBuZw)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1kYTAyNmMxY2Q2NTNiMDk1LnBuZw)
  • 若j所在数字>5,则忽略,继续向左移动。
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1kZjE3MmQ2OGIyZTg4N2EyLnBuZw)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1kNWZmMTMzYWM2YzlkODdiLnBuZw)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi0wYmJlYzA2Y2EwMDkwMjEwLnBuZw)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1mNDA5YzVjNDBhNjVkZTk5LnBuZw)

3.j == i 时,意味着交换结束,列表除了首位的“标杆数”,其余部分分为<=5和>5两堆,那么我们还应该把“5”放到这两堆中间,让列表看上去更有序。即:

data[0], data[j] = date[j], data[0]
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1jZjVhMTAzMzcyYjBjZGZkLnBuZw)

![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1iOWExMzcyY2M3ODZmMjFjLnBuZw)

注意:如果j此时不在列表中间呢,比如由于数据特殊,j最终停在在首、尾处呢?

![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1mNDg0ZjFiNTAxNGQyYWRjLnBuZw)
不能交换
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi03Zjc3NDkzMDFjMDY3NGQ2LnBuZw)
可以交换

考虑到这一点,我们就可以意识到,要做的是把一开始找的标杆放到应有的位置上,即最后一个<=5的数的位置。因此,我们在交换前加一个判断:

if data[j] <= data[0]:
    data[0], data[j] = data[j], data[0]

4. 结束操作,返回此时的data。


容易看到,由于我让j的移动占主动性,j先找到一个<=5的数后,i才能开始行动找>2的数。那么当j、i会,请问j最终会停在<=5还是>5的数字上呢?

答案是:对于这里给出的data,j总是会停在<=5的数字上,或者说对于len(data)>5的data,j与i总是相遇在最右的“<=标杆数”的位置上(仔细想一想~)。
这样做是为了便于data[j]与data[0]交换,所以让j先行;如果让i先行,那么相反的,i、j通常相遇在最左的“>标杆数”的位置上,这样不利于data[i]与data[0]交换。
对于len(data) == 1 or len(data) == 2的两种例外情况,留给读者思考。伪代码如下:

if len(data) == 2:
    if data[j] <= data[0]:
            data[0], data[j] = data[j], data[0]
        return quicksort(data[left_part]) + quicksort(data[right_part])

if len(data) == 1:
return data

以上部分讲的是单次排序的(啰嗦)细节,整个快速排序是若干次单次排序的递归,下面讲解一下递归部分:

首先简化模型,我们把不直观的“数字比大小”转换为直观的“图形排序”,将data中的“标杆数5”及<=5的数替换为“☻”,将>5的数替换为“█”,则有:


![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi03ZjA5YmY1ZmVkMTI2OGFlLnBuZw)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi0xM2I2NjZhYzFlZjQ0MjI5LnBuZw)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1iNjc1OTRjNmM3YjM2OWFlLnBuZw)

接着,用上述的i,j排序规则操作一遍之后,得到:


![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi1jMGMyNzJiMWNhZGJlYTg3LnBuZw)

是不是清晰许多?

进行递归,我们要做的就是把分大小排序的data拆分为两个data,分界线即为“标杆数”,然后分别对两个拆分data排序,直至抵达递归的回归条件(len(data) <= 1即终止)。
对示例列表进行快速排序的原理如下:

![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMDA5NDgzNi05M2YxNTY4NWNiYWY0NjliLnBuZw)

完整代码如下:

def quicksort(data):     #快速排序
    stone = data[0]
    i = 1
    j = len(data)-1
    if len(data) > 1:     #分为len(data) >2和len(data) == 2两种情况,可合并
        while j > i:
            if data[j] <= stone:
                if data[i] > stone:
                    data[j], data[i] = data[i], data[j]
                else:
                    i += 1
            else:
                j -= 1
        if data[j] <= stone:     #当len(data) == 2时只执行此部分
            data[0], data[j] = data[j], data[0]
        return quicksort(data[:j]) + quicksort(data[j:])
    else:     #回归条件,len(data) <= 1
        return data

完结撒花~
以上 .

      </div>
    </div>
</div>

<!-- 如果是付费文章,未购买,则显示购买按钮 -->

<!-- 连载目录项 -->

<!-- 如果是付费文章 -->
  <!-- 如果是付费连载,已购买,且作者允许赞赏,则显示付费信息和赞赏 -->
    <div id="free-reward-panel" class="support-author"><p>小礼物走一走,来简书关注我</p> <div class="btn btn-pay">赞赏支持</div> <div class="supporter"><ul class="support-list"></ul> <!----></div> <!----> <!----></div>

  <div class="show-foot">
    <a class="notebook" href="/nb/21121657">
      <i class="iconfont ic-search-notebook"></i>
      <span>学习随笔</span>



  <!-- 文章底部作者信息 -->
    <div class="follow-detail">
      <div class="info">
        <a class="avatar" href="/u/54af454d8fd9">
          ![96](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQuamlhbnNodS5pby91c2Vycy91cGxvYWRfYXZhdGFycy8xMDA5NDgzNi9hOGQxMDVjYy1lZmIxLTQ1N2EtYWQ0Ni01YTRlY2Q5YmQ5Y2QuanBn)


_Phine

写了 5729 字,被 7 人关注,获得了 10 个喜欢


<div class="meta-bottom">
  <div data-v-6ddd02c6="" class="like"><div data-v-6ddd02c6="" class="btn like-group"><div data-v-6ddd02c6="" class="btn-like"><a data-v-6ddd02c6="">喜欢</a></div> <div data-v-6ddd02c6="" class="modal-wrap"><a data-v-6ddd02c6="">3</a></div></div> <!----></div>
  <div class="share-group">
    <a class="share-circle" data-action="weixin-share" data-toggle="tooltip" data-original-title="分享到微信">
      <i class="iconfont ic-wechat"></i>
    </a>
    <a class="share-circle" data-action="weibo-share" data-toggle="tooltip" href="javascript:void((function(s,d,e,r,l,p,t,z,c){var%20f='http://v.t.sina.com.cn/share/share.php?appkey=1881139527',u=z||d.location,p=['&amp;url=',e(u),'&amp;title=',e(t||d.title),'&amp;source=',e(r),'&amp;sourceUrl=',e(l),'&amp;content=',c||'gb2312','&amp;pic=',e(p||'')].join('');function%20a(){if(!window.open([f,p].join(''),'mb',['toolbar=0,status=0,resizable=1,width=440,height=430,left=',(s.width-440)/2,',top=',(s.height-430)/2].join('')))u.href=[f,p].join('');};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();})(screen,document,encodeURIComponent,'','','', '推荐 _Phine 的文章《理解快速排序算法》( 分享自 @简书 )','https://www.jianshu.com/p/7631d95fdb0b?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=weibo','页面编码gb2312|utf-8默认gb2312'));" data-original-title="分享到微博">
      <i class="iconfont ic-weibo"></i>
    </a>
    <a class="share-circle" data-toggle="tooltip" id="longshare" target="_blank" data-original-title="" title="">
        <div class="qrcode" id="qrcode">
         [外链图片转存失败(img-qag9cKXV-1562208998927)(https://cdn2.jianshu.io/assets/web/download-index-side-qrcode-cb13fc9106a478795f8d10f9f632fccf.png)]
         <p>下载app生成长微博图片</p>
         </div>
      <i class="iconfont ic-picture"></i>
    </a>
    <a class="share-circle more-share" tabindex="0" data-toggle="popover" data-placement="top" data-html="true" data-trigger="focus" href="javascript:void(0);" data-content="
      <ul class=&quot;share-list&quot;>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+e('https://www.jianshu.com/p/7631d95fdb0b?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=qzone')+'&amp;title='+e('推荐 _Phine 的文章《理解快速排序算法》'),x=function(){if(!window.open(r,'qzone','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-zone&quot;></i><span>分享到QQ空间</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://twitter.com/share?url='+e('https://www.jianshu.com/p/7631d95fdb0b?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=twitter')+'&amp;text='+e('推荐 _Phine 的文章《理解快速排序算法》( 分享自 @jianshucom )')+'&amp;related='+e('jianshucom'),x=function(){if(!window.open(r,'twitter','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-twitter&quot;></i><span>分享到Twitter</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://www.facebook.com/dialog/share?app_id=483126645039390&amp;display=popup&amp;href=https://www.jianshu.com/p/7631d95fdb0b?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=facebook',x=function(){if(!window.open(r,'facebook','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-facebook&quot;></i><span>分享到Facebook</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://plus.google.com/share?url='+e('https://www.jianshu.com/p/7631d95fdb0b?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=google_plus'),x=function(){if(!window.open(r,'google_plus','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-google&quot;></i><span>分享到Google+</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:'',r='http://www.douban.com/recommend/?url='+e('https://www.jianshu.com/p/7631d95fdb0b?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=douban')+'&amp;title='+e('理解快速排序算法')+'&amp;sel='+e(s)+'&amp;v=1',x=function(){if(!window.open(r,'douban','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r+'&amp;r=1'};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()&quot;><i class=&quot;social-icon-sprite social-icon-douban&quot;></i><span>分享到豆瓣</span></a></li>
      </ul>
    " data-original-title="" title="">更多分享</a>
  </div>
</div>

  <a id="web-note-ad-1" target="_blank" href="/apps/redirect?utm_source=note-bottom-click">![Web note ad 1](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4yLmppYW5zaHUuaW8vYXNzZXRzL3dlYi93ZWItbm90ZS1hZC0xLWMyZTE3NDY4NTlkYmYwM2FiZTQ5MjQ4ODkzYzliZWE0LnBuZw)</a>

<!--
<div id="note-comment-above-ad-container">
  <span id="youdao-comment-ad" class="ad-badge">广告</span>
</div>
-->
<div><div id="comment-list" class="comment-list"><div><form class="new-comment"><a class="avatar">![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4yLmppYW5zaHUuaW8vYXNzZXRzL2RlZmF1bHRfYXZhdGFyL2F2YXRhcl9kZWZhdWx0LTc4ZDRkMWY2ODk4NGNkNmQ0Mzc5NTA4ZGQ5NGI0MjEwLnBuZw)</a> <div class="sign-container"><a href="/sign_in?utm_source=desktop&amp;utm_medium=not-signed-in-comment-form" class="btn btn-sign">登录</a> <span>后发表评论</span></div></form> <!----></div> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> <div id="normal-comment-list" class="normal-comment-list"><div><div><div class="top-title"><span>2条评论</span> <a class="author-only">只看作者</a> <a class="close-btn" style="display: none;">关闭评论</a> <div class="pull-right"><a class="active">按时间倒序</a><a class="">按时间正序</a></div></div></div> <!----> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> <div id="comment-42671809" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/3559b64d909a" target="_blank" class="avatar">![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQuamlhbnNodS5pby91c2Vycy91cGxvYWRfYXZhdGFycy83Mjg3Njk5L2Y1MTgyOWYzLTFkZWEtNDNlZi1hNjljLWQwYzNmNDZjZDcxMy5qcGc)</a>  </div> <!----></div> <div class="info"><a href="/u/3559b64d909a" target="_blank" class="name">花溪的小石头</a> <!----> <!----> <div class="meta"><span>3楼 · 2019.06.24 18:05</span></div></div></div> <div class="comment-wrap"><p>关键为什么j--之后i++。一直j--,最后一起i++难道不行吗</p> <!----> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-42671809" class="like-button"><span data-v-cdecbe24="">赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list hide"><!----> <!----></div></div><div id="comment-30276511" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/8f9cb2f1ae47" target="_blank" class="avatar">![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQuamlhbnNodS5pby91c2Vycy91cGxvYWRfYXZhdGFycy8xODA3NTI3L2MxMjQyODBiLWFiMjYtNDEzOS1iODc5LTBlY2Q2MGMwNTAzNi5qcGc)</a>  </div> <!----></div> <div class="info"><a href="/u/8f9cb2f1ae47" target="_blank" class="name">darkengine</a> <!----> <!----> <div class="meta"><span>2楼 · 2018.11.03 15:42</span></div></div></div> <div class="comment-wrap"><p>今天快速翻了下Java的Arrays类的源码,它的sort接口用的是DualPivotQuicksort,双锚点分三段据说是效率最高的方法</p> <!----> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-30276511" class="like-button"><span data-v-cdecbe24="">1人赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list hide"><!----> <!----></div></div></div></div> <!----> <div><!----></div></div></div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值