排序優化 如何實現乙個通用的 高效能的排序函式?

2021-10-11 03:24:03 字數 430 閱讀 8111

1、三數取中法

我們從區間的首、尾、中間,分別取出乙個數,然後對比大小,取這 3 個數的中間值作為分割槽點。這樣每間隔某個固定的長度,取資料出來比較,將中間值作為分割槽點的分割槽演算法,肯定要比單純取某乙個資料更好。但是,如果要排序的陣列比較大,那「三數取中」可能就不夠了,可能要「五數取中」或者「十數取中」。

2. 隨機法

隨機法就是每次從要排序的區間中,隨機選擇乙個元素作為分割槽點。這種方法並不能保證每次分割槽點都選的比較好,但是從概率的角度來看,也不大可能會出現每次分割槽點都選得很差的情況,所以平均情況下,這樣選的分割槽點是比較好的。時間複雜度退化為最糟糕的 o(n2) 的情況,出現的可能性不大。

排序優化 如何實現乙個通用的 高效能的排序函式?

1.排序演算法一覽表 2.為什選擇快速排序?1 線性排序時間複雜度很低但使用場景特殊,如果要寫乙個通用排序函式,不能選擇線性排序。2 為了兼顧任意規模資料的排序,一般會首選時間複雜度為o nlogn 的排序演算法來實現排序函式。3 同為o nlogn 的快排和歸併排序相比,歸併排序不是原地排序演算法...

如何優化乙個氣泡排序

氣泡排序應該是很多人第乙個接觸的排序,比較簡單,不展開講解了 function bubblesort arr return arr 複製 氣泡排序總會執行 n 1 n 2 n 3 2 1趟,但如果執行到當中某一趟時排序已經完成,或者輸入的是乙個有序陣列,那麼後邊的比較就都是多餘的,為了避免這種情況,...

JS優化系列 乙個通用公告系統的實現

之前一篇 js優化系列 從乙個計時器的寫法 js多種實現方式的優劣 的討論讓我學到不少東西,現在再來一篇,拋磚引玉。站點的很多頁面經常需要發一些公告,而每次發公告都需要開發同學手工來操作是很麻煩的,而且經常不夠實時。因此寫了乙個通用公告系統,希望能將這份工作交由產品同學來操作。這裡只寫了 小黃條 一...