在程式設計中很多時候我們需要對陣列重排,所以探求一種高效的重排演算法還是很有必要的。上午逛論壇時看到乙個帖子中的「簡潔、高效」的重排演算法,如下:
function randomsort()
function arrrandomsort(arr)僅僅4行**,當時我那個慚愧啊,自己以前怎麼沒有想到這麼簡單的方法了?還繞了乙個大圈子來寫這個重排。激動之後做了個測試:
function randomsort()
function arrrandomsort(arr)
_array = ;
for (i = 0;i使用上面的演算法對乙個1000個元素的陣列進行重排,執行時間是居然是210毫秒,有些恐怖,初步估計是因為sort函式造成的,因此將上面**裡新增了乙個計數器來跟蹤sort引數中的函式的執行次數。
_global.n = 1;
function randomsort()
function arrrandomsort(arr)
_array = ;
for (i = 0;i 看來效率的消耗果然是因為sort函式,對這1000個元素的陣列進行排序,執行了7153毫秒,randomsort函式被執行了499501次,顯然,這段看似簡潔的**其實並不實用。而sort函式內部到底是使用什麼演算法來完成的這個排序了?以至於需要執行這麼多次比較函式。簡單排序?快速排序?我也不太清楚,有空了再做進深入測試,暫且不在此文討論範圍之內。
在我搜尋array.sort的內部實現時發現了乙個帖子
[url=用array.sort進行隨機排序》[/url]
,原來有關於用sort方法排序已經引起了很大的爭議,而此文作者是站在支援sort排序的立場的,通過與別人的**比較,他最初得出的結論是array.sort來做陣列重排是有利的,而跟帖中又出現了乙個更為高效的演算法,此演算法跟sort方法相比效率要高很多,特推薦出來供大家借鑑。下面是我用此演算法和sort演算法做的對比,分別對100個元素的陣列進行100次重排,比較其總消耗的時間,結果消耗時間分別為70ms和1448ms,其中紅色部分為效率更佳演算法:
/*演算法一 */
array.prototype.random = function($lim:number):array {
var tmp:array = this.concat();
var len:number = tmp.length;
//trace(($lim && $lim
JavaScript 陣列的重排序方法
陣列中有兩個可以直接用來排序的方法 reverse 和sort reverse 方法 反轉陣列項的排列順序,即逆序排列之前的陣列。例1 使用reverse 方法排列陣列 var arr 12,2,31,4,55,38 alert arr.reverse 輸出結果為 38,55,4,31,2,12 s...
最高效的陣列移動
比如要將陣列 int a 的元素迴圈右移動4 那麼 結果為 顯然最高效的方法是 int temp a 1 a 1 a 9 a 9 a 5 a 5 temp temp a 2 a 2 a 10 a 10 a 6 a 6 temp temp a 3 a 3 a 11 a 11 a 7 a 7 temp ...
PCM和flash的均衡演算法
前面的幾篇文章已經說明了pcm的特性,它可以和傳統的dram構成混合記憶體提高計算機系統的效能的同時降低記憶體功耗。然而仍然有人提出將pcm用於外存,這種非易失的新型儲存器用於外存必將大幅提高計算機的速度。但是鑑於pcm的 較高,所以可以使用pcm和flash的混合外存。首先介紹flash,快閃儲存...