std list sort 用了什麼演算法?為什麼速度這麼快?

時間 2021-06-01 03:00:23

1樓:linux40

歸併的非遞迴?暈死

明明是不需要與待排資料等長的臨時空間的歸併,因為list在歸併的時候不需要臨時空間,這樣不但不用copy,甚至在中間步驟不用完全遍歷待排序列,簡直就是極大地優化了歸併排序。

遞不遞迴都不重要。

用迴圈寫歸併。。。處理offset時累不累。。。

2樓:邱浩

其實就是:歸併排序的非遞迴形式。

這個演算法的形式我們可以形象的想象一下,更利於我們的理解

我們有 7個球如下:

有一系列的桶(從上到下依次是0號桶,1號桶,2號桶。。桶是著放的)

桶的容量是: 2^(桶號)

即:0號 :1個

1號 :2個

2號 :4個

3號 :8個

。。。。。。

這樣你選擇桶的情況是:

當你想放入的球 1 個 : 0號桶

當你想放入的球 2 個 : 1號桶

當你想放入的球 3 個 : 2號桶

當你想放入的球 4 個 : 2號桶

(球數對應合適的桶號有點 」以 2 為倍數的最小上界數" 的感覺 )

。。。現在你的做法:

a.取第乙個球:3,

看 0 號桶有球否,

*沒有 :桶空,正好放這乙個球到桶中,轉a(再取下一球:2)

*有 : 0號桶有也肯定是個一球,然後「歸併」這乙個球,然後 0 號桶放不下了,再準備將兩個球放入1 號桶

看 1 號桶有球否,

沒有:正好放入,轉a(再取下一球)

有 :「歸併」1 號桶球,並準備將這些球放入下一號桶:2號桶

。。。如此往復,直到你 7 個球都放入最後合適的桶中。

(其實我們可以猜到最後的桶號:3號桶,容量是2^3 = 8)

3樓:小紅菌

用的是歸併排序啊,特別耗記憶體,當時寫個題用了list排序一直mle,於是乎,我就機智的typedef list vector過掉了(逃)

4樓:蔡傑

是歸併排序吧。由於list的儲存特徵,並沒有像陣列在歸併過程中需要的O(n)的空間耗費,而僅僅是常數級別的空間耗費。而時間耗費是nlog(n)。

5樓:

這是SGISTL List 的實現,看sort方法http://www.

6樓:李莫

為什麼我理解成的是mergesort。。。只不過這個merge沒有用遞迴,是以1,1;2,2;4,4的形式從下面向上面merge。我理解有誤?

7樓:jimmy

feihu 在http://www.

詳細的介紹了stl 快排機制

8樓:鍊金術士燒白君

在《STL原始碼剖析》中侯捷提到std::list由於其獨特的迭代器設計,所以不能使用std::sort(),而自己設計了乙個成員函式sort(),採用非遞迴的快速排序。

但是當我看這一部分原始碼的時候,並沒有發現關於快速排序的特徵,如找基準位置等,倒是符合歸併排序的特徵,每次使用了list::merge()將兩個有序的list合併為乙個。所以我認為這是乙個非遞迴的歸併排序,複雜度同樣為O(nlogn)。

9樓:

標準規定此演算法是不超過 NlogN 級別的,其中 N 是鍊錶的長度。並未規定具體的實現方式。

嗯,實際上如此定義假定了比較兩個元素是常數時間的。

乙個可能的方式是使用 merge sort。SO 提到的實現的歸併順序大概是這樣:(x 代表無序,o 代表有序)(歸併操作是跳步的,一次會做好幾個歸併)

而對於乙個陣列的歸併排序,遞迴版本大致是這樣:(這裡的歸併是不跳步的)

這裡面提到的實現其實是類似遞迴版,不過每次分點都取到了 2^k,64 個桶是棧,這就不難理解了。SO 回答裡面提到的這樣不用每次遍歷中點、又能提高快取命中是對的,看上面的過程圖就知道了。

豐田為什麼會省油?用了什麼技術?

Agoni 豐田省油的車普遍使用小排量自吸發動機 CVT組合,搭配 可變氣門正時 技術讓豐田有著不錯的燃油經濟性。發動機vvt技術是可變氣門正時,是一種用於汽車活塞式發動機中的技術。vvt技術可以調節發動機進氣排氣系統的重疊時間與正時,降低油耗並提公升效率。曲軸通過正時皮帶 齒輪或鏈條來驅動凸輪軸,...

為什麼Find X用了COP還有下巴?

凌亂中的小瘋子 打個比方,因為具體資料我還真不知道 Find X最寬的底邊大概3.5公釐寬,剩下三側邊都是2.5公釐寬,所以才會給你有下巴的錯覺 iphone x 的四條邊都是3.5公釐寬你懂我意思吧 也就是說3.5公釐左右的寬度可能就是是COP封裝的最窄極限了 懋亡 根據網上給出的資料,findx...

眼霜怎麼用?用了有什麼好處?

牛奶味硬糖 先來分享下,我平時塗眼霜的方法 1.先保證眼部的濕潤,不可以幹搓哦。可以先用溫水沾濕化妝棉,濕敷一會。2.手指搓熱,在眼部捂一會,這樣會讓後續眼霜吸收的高效一些 3.眼霜點塗在眼周,不要只塗下面哦 4.上眼皮從眼窩往外塗,下眼皮從眼尾往內塗,方向不要弄錯哦 5.食指和中指呈V字型,往太陽...