編程珠璣 第十一章總結(jié)

這一章主要講了quick-sort和其改進(jìn)的過程。下面主要總結(jié)一下改進(jìn)的動(dòng)機(jī)。

  • 動(dòng)機(jī)1:
    原始的快速排序算法適合于數(shù)字大小隨機(jī)分布的情況。若是一個(gè)相同的序列,那么每次劃分的點(diǎn)都是未劃分點(diǎn)中位置最靠前的點(diǎn),導(dǎo)致劃分不均勻,時(shí)間復(fù)雜度退化到o(n^2)。

  • 解決方案:
    用兩個(gè)指針分別向中間靠攏,基準(zhǔn)點(diǎn)依然選擇序列中最左側(cè)的點(diǎn),左指針當(dāng)遇到比基準(zhǔn)點(diǎn)大或等于的點(diǎn)就stop,同理右指針遇到比基準(zhǔn)點(diǎn)小或等于的點(diǎn)就stop,這樣導(dǎo)致劃分點(diǎn)靠近數(shù)字的中間,使得時(shí)間復(fù)雜度接近于歸并排序的時(shí)間復(fù)雜度nlog(n)

void qsort(vector<int>& v, int l, int u) {
    if (l >= u) return;
    int t = v[l]; int i = l; int j = u+1;
    while(true) {
        do {
            i++;
        }while(i <= u && v[i] < t);
        do {
            j--;
        }while(v[j] > t);
        if (i > j) {
            break;
        }
        swap(v[i], v[j]);
    }
    swap(v[j], v[l]);
    qsort(v, l, i - 1);
    qsort(v, i + 1, u);
}
  • 動(dòng)機(jī)2:
    選取基準(zhǔn)點(diǎn)可以隨機(jī)化

  • 動(dòng)機(jī)3:
    對小規(guī)模序列快排效果不如插入排序。所以在動(dòng)機(jī)1代碼中添加了

if(u - l < threshold)
  return;

提前終止排序,最后再使用插入排序的算法對整體排序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者:大海里的太陽原文地址:http://www.cnblogs.com/wxisme/ 前言 查找和排序算法是算...
    IT程序獅閱讀 2,623評論 0 63
  • 一、概述 排序算法概念 在計(jì)算機(jī)科學(xué)與數(shù)學(xué)中,一個(gè)排序算法是將一組雜亂無章的數(shù)據(jù)按一定的規(guī)律順次排列起來的算法。排...
    簡書冷雨閱讀 1,191評論 0 0
  • 面試中常用的幾個(gè)基本算法整理記錄(二) 無意中看到了面試中的 10 大排序算法總結(jié)原文地址記錄一下,方便查找。 查...
    190CM閱讀 1,878評論 1 12
  • 親近大自然,放飛心情,高淳國際慢城之旅 3月28日,海吉立健組織80余人,開展“親近大自然,放飛心情”高淳國際慢城...
    無憂無慮61閱讀 489評論 1 2
  • 我和老公計(jì)劃過我們要在猴年生一個(gè)小猴子, 可是我們沒有想到會(huì)一下子來兩個(gè)小猴子! 我們是小學(xué)的同班同學(xué), 那種青梅...
    右右左左閱讀 522評論 9 12

友情鏈接更多精彩內(nèi)容