3
A
回答
7
Timsort是專門爲這種情況設計的。
Timsort是混合排序算法,從合併排序和 插入排序衍生,設計成多種真實世界 數據的表現良好。它是由Tim Peters於2002年發明的,用於編程語言Python 。該算法找到已經排序的數據的子集,並使用子集高效地對數據進行排序。
另一種替代方案是Smoothsort,也被設計爲利用部分排序的數據。
它是由Edsger Dijkstra算法在1981年 像堆排序開發的堆排序的變化,smoothsort的上限爲O(ñ日誌ñ)。該 優勢smoothsort的是,它更接近於O(ñ)如果 輸入已經被分類到一定程度的時候,而堆排序平均 O(ñ日誌ñ)不管初始排序的狀態。
0
std::sort
一般。
雖然確切的實施細節是實施的質量,但良好的std::sort
實施應該利用數據的部分排序性質。例如,libc++
。
請注意,如果您知道排序的部分在哪裏,則可以使用std::inplace_merge
。例如,假設v
是vector
,其中[1,7]被排序並且[7,10]也被排序,則可以使用std::inplace_merge(v.begin() + 1, v.begin() + 7, v.begin() + 10)
,但是這更容易出錯。
至於結果的順序:如果<
不適合你,隨意提供自己的比較功能。
0
如果你在一個循環內進行排序,可以考慮一個treap或紅黑樹。 Treaps平均速度很快(但標準偏差較大),紅黑樹的運行時間變化較小(平均運行時間不夠好,但運行時間標準偏差較低)。 IOW,對於批量應用程序使用樹枝,對於交互式應用程序,您可能需要紅黑樹,以便用戶不必等待很長時間。
如果你不是在一個循環中排序,然後Timsort。
相關問題
- 1. 排序與插入部分排序的數組排序
- 2. 排序樹存儲的某些部分
- 3. 數組排序與前半部分和後半部分排序
- 4. 排除數組中的某些字
- 5. 的R - 重新排序列的某些部分在數據幀
- 6. 排序一些ID與某些數字的PHP字符串中
- 7. 數組排序的字母排序
- 8. 已計算數組排序
- 9. 排序數組 - 從外部數據對數組排序
- 10. 排序數組排序
- 11. Java:排序數組(第2部分)
- 12. 排序數字PHP數組
- 13. 數組內部的數組 - 按字母順序排序
- 14. 在對數組進行排序時忽略某些字符串
- 15. 用排序數字排序
- 16. 部分排序數據庫字段
- 17. 使用其他數組排序數組
- 18. 排序PHP數組由其他數組
- 19. 根據其他數組排序數組
- 20. 按其他數組排序數組?
- 21. 排序數組細分
- 22. 創建數字序列,排除某些數字
- 23. 排序數組中的50個數字
- 24. 組行,計數分組的行和排序行的排序
- 25. 在已排序的數組中添加額外的數字
- 26. 合併排序 - 使用Int數組排序字符串數組
- 27. 3對已排序的數組進行排序。 O(NlogN)實現
- 28. 按字符串的部分排序字符串數組
- 29. 拆分和排序字符串數組
- 30. 將數字插入到已排序的數組中!
當數字部分排序時,插入排序非常理想。 – st0le