快速排序的執行時間並不穩定,憑什麼被命名作 快速 排序?

時間 2021-05-07 15:51:01

1樓:

演算法題目被卡掉, 感覺應該是沒有使用randomized 的quick sort。雖然普通版的quick sort 期望執行時間,但是我們並不能控制input到底是什麼。如果出題者習慣給一些特定順序的input, 普通版的quick sort 分分鐘卡成insertion sort.

所以還是老話說的好,自己動手, 豐衣足食。 用完randomize之後,媽媽再也不用擔心T(n) = T(n-1)+ (n) 了

2樓:韓佳文

詳細內容可以參考《演算法導論》快排那一章,我這裡簡單說一下。

快排效能和劃分過程有關,如果劃分不平衡的話就會出現最壞情況,導致複雜度接近O(n^2)。

但快排有個很好的特點,當劃分是常數比例,複雜度都是O(nlgn)。在好壞劃分交替出現的情況下複雜度也是O(nlgn)。

這樣一來我們便有個很自然的想法,即隨機化,隨機加入乙個擾動,便能使劃分得到優化,從而達到期望的複雜度。

而且在劃分隨機化後的情況下,出現最壞情況的機率是非常非常非常小的(說三遍)。

3樓:

quicksort的期望執行時間是, 而且前面的常係數比較小。

在大量的隨機輸入下最壞情況出現的概率是極小的。

優化的partition過程進行原地排序(In place sort),相比歸併排序這種非原地排序,可以更好地利用cache。堆排和歸併只是理論上的漸近最優(asymptotically optimal),在實際應用中還要考慮體系結構的影響。更深入的解釋的就需要資訊理論的知識了,可以參考劉未鵬的博文數學之美番外篇:

快排為什麼那樣快

4樓:

高效排序演算法裡快排的常數1.38,最小,所以叫快排,這是算設常識。

另:快不快應該寫用理論分析,一般的就是寫遞迴式化解析式那一套,而不是用A題命中率判斷。

這麼說的原因是:

1.題目的資料可能存在特殊的分布,如果再細緻一點分析,可以把資料的分布考慮進去分析效能。

2.既然是題,那麼不一定只是簡單的排序,固定操作的時間與你要做的工作多複雜有關,也和資料量有關,效能是漸進意義下的。

可以看到,工業界多用快排當然是理論指導實踐的產物,因為工業界的資料分布更一般,更有說服力。

另:如果非嫌不夠快,理論上的高效演算法多的是,隨機化演算法也許符合您的要求?但相信以A題為目的的話肯定不會有興趣搞那麼複雜了。

另:深究排序問題請看TAOCP3

5樓:

我覺得題主根本沒測過。大量資料快排實際執行比歸併和堆排序快的多。除非你是順序什麼的。這個你可以自己寫個測試程式什麼的。

還有快排的不穩定性是指同一鍵值的資料的相對順序會發生變化,這個實際運用一點也不重要。

如果說是海量隨機資料,快排的速度絕對是穩定的。

Windows10關機後,CPU執行時間不清零是怎麼回事,會影響CPU使用壽命嗎?

枸杞 Win 8及以上系統採用 快速啟動 模式。這個模式下,在關機前會把當前已載入的驅動和Win核心快取為休眠檔案,以加速下次開機速度。所以這個時間才會不清理。但是快速啟動關機也是完全斷電的,筆記本關機可以取下電池。Windows的睡眠和休眠是有區別的 至於有人說,快速啟動是CPU一直低功率執行,什...

用Python寫的方法,為什麼執行時間這麼長?

因為某些編譯型語言 如C 的編譯器有尾遞迴優化,所以遞迴演算法效率並不低。但是python並沒有尾遞迴優化。關於尾遞迴可以參考這個 什麼是尾遞迴?程式設計 至於Python如何引入尾遞迴,有乙個增強函式式程式設計特性的模組可以引用,可以參考丁來強之前在Pyconn china 2015上的講義內容 ...

Docker容器在執行時訪問的檔案路徑是什麼

軟體園的豬 Docker容器本質上不是乙個虛擬機器,但是使用的時候你可以基本上把它當做乙個虛擬機器。容器程序訪問的是這個虛擬機器內的檔案,不是宿主機內的檔案。Docker容器執行結束就銷毀了,所以要把需要持久儲存的檔案儲存到宿主機上。使用 volume指令可以把宿主機目錄對映到虛擬機器內,交給容器程...