今天工作室斷網!果斷回宿舍,不然各種資料都沒有。(他說將來會找到!)不好意思,又哼起來了。進入主題,大家都知道,快排是各種排序算法中,最高效的也是應用最廣的,還有更重要的一點,面試特別愛考的!
其實大家或多或少都聽說過快排,也就是先從取出一個基准值,然后再把其它的數與之相對比,小的放左邊的集合里,大的放右邊的集合里,再通過遞歸不斷重復該步驟,實現最高效率的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圖為主,其實是為了讓觀眾老爺們,能親自手打代碼,不做伸手俠。
若有什么錯誤,請立即指出,我會盡快修改,以免誤導他人噢噢噢!