當有一個陣列,其中的資料是從頭開始降序存盤的,比如5, 4, 3, 2, 1哪種排序演算法(快速排序、歸并排序...)是這個陣列升序排序的最佳方式?為什么?
uj5u.com熱心網友回復:
自然歸并排序或 TimSort(類似于自然歸并排序)的變體將掃描遞增或遞減序列,并在遇到遞減序列時反轉它們。如果整個陣列是遞減序列,那么初始掃描在反轉陣列時會對整個陣列進行排序。
uj5u.com熱心網友回復:
在經典的排序演算法中,當輸入結果(幾乎)按降序排序時,堆排序會做得很好,因為最大堆構建階段將(幾乎)不涉及交換(而最多的交換將發生在輸入已按升序排序)。
請注意,排序速度取決于許多因素(如資料型別、比較函式、并行計算的可用性、記憶體組織等)。另請參閱堆排序與其他排序的比較。
uj5u.com熱心網友回復:
最好的方法是避免排序而只是顛倒順序。
這是一個非常簡單和快速的線性演算法。
uj5u.com熱心網友回復:
最好的演算法是只反轉序列,而不是使用任何排序方法,如快速排序、歸并排序等。因為這將是 O(N log N) 的時間復雜度,而反轉序列將是線性的 O(N)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/329068.html
上一篇:Asp.NetCore-在服務器運行時修改身份驗證方案
下一篇:為無向環狀序列創建唯一識別符號
