JavaScript快排與原生sort的測試


  今天工作室斷網!果斷回宿舍,不然各種資料都沒有。(他說將來會找到!)不好意思,又哼起來了。進入主題,大家都知道,快排是各種排序算法中,最高效的也是應用最廣的,還有更重要的一點,面試特別愛考的!

  其實大家或多或少都聽說過快排,也就是先從取出一個基准值,然后再把其它的數與之相對比,小的放左邊的集合里,大的放右邊的集合里,再通過遞歸不斷重復該步驟,實現最高效率的quickSort。

  Talk is cheap, show you my code!

排序結果我就不寫出來啦,大家都會數大小,哈哈哈。


  剛說完JavaScript快排,突然想到,尼瑪,Array.prototype.sort 不是有一個排序方法么?當然這個sort方法直接使用是有弊端的,像剛才那個數組,打印出來的結果可就是:

  嗯!坑爹的字符串排序!快速的說一下,sort函數是可以接收一個對比函數參數的,若返回負數則排在前面,返回正數排在后面。我們直接看最簡單的那種對比函數!

  OK!升序什么的,完全可以啊!


  兩種方法都出來了,本着選擇困難症不能有的精神(裝逼的時刻到了!),我們必須知道是快排速度快呢,還是原生數組對象的sort速度快。(這不廢話嘛!原生優化過的肯定比自定義遞歸快啊!)。呃,那我們來看看快多少。

  測試環境:10000條隨機0~10的數字進行排序。

  測試程序:

var arr = [];
/*一萬條隨機數*/
for(var n = 0; n < 10000; n++){
    arr.push(Math.round(Math.random()*10));
}

var text = function (fn, param) {
  var start, end;
  // 記錄執行的起始時間
  start = new Date().getTime();
  // 執行待測試的方法
 arr.quickSort() 或 arr.sort(compare); // 記錄執行的結束時間
  end = new Date().getTime();
  // 輸出待測試方法所運行的結果和耗時
  console.log("排序完成,耗時" + (end - start) + "毫秒" );
}

text();

 

 

先是quickSort排序的測試:使用arr.quickSort()

大致在2250ms附近波動的,10K條數據排序,2S。

再到原生sort排序方法測試:使用arr.sort(compare)

10ms.....

230倍的差距!

大家乖乖用sort吧,無非寫一個compare函數嘛,多大點事兒!


哈哈哈,今天早上斷網,就自己搗騰弄了些這個,晚上發一下。

最近我的blog的重要的代碼都會以PO圖為主,其實是為了讓觀眾老爺們,能親自手打代碼,不做伸手俠。

若有什么錯誤,請立即指出,我會盡快修改,以免誤導他人噢噢噢!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM