最近看到乙個排序,所以自己也看了一下,這裡分享一下。
首先建立乙個陣列
// 建立乙個陣列
const arr = ;
function random(min, max)
function generatearr(len)
}generatearr(10);
自己可以試試,看看效果;
然後是重點了,排序的主體函式
function quicksort(arr)
var pivotindex=math.floor(arr.length/2);
//找基準,並把基準從原陣列刪除
var pivot=arr.splice(pivotindex,1)[0];
//定義左右陣列
var left=;
var right=;
//比基準小的放在left,比基準大的放在right
for(var i=0;i為什麼列印時間(自己思考一下,後面解析,記得先思考一下)
好了,排序結束了,是不是很簡單呢?但是有個小問題,
這個就是所謂的:阮一峰版的快速排序
看下這個,有人懟他
js高階函式裡面還有乙個方法
var arr1 = arr.sort(function (x,y)
if (x > y)
return 0;
})
ok了,是不是很放便
這個就是阮一峰版所得的時間
// vim: 0.087890625ms 十
// vim: 0.41064453125ms
// vim: 7.47900390625ms
// vim: 13.7939453125ms 萬
// vim: 72.4541015625ms
// vim: 582.738037109375ms
// vim: 6897.35791015625ms 千萬
這裡的是另乙個時間
// vim: 0.196044921875ms
// vim: 5.68798828125ms
// vim: 4.801025390625ms
// vim: 11.506103515625ms 萬
// vim: 38.754150390625ms
// vim: 329.005859375ms
// vim: 4046.4951171875ms 千萬
// vim: 50085.428955078125ms
可以看出當超過一萬,時間就有了差別,而且當有
一億條資料的時候,上面的就跑不動了,所以沒有時間,但是下面的還有,從這一點可以看出下面的方法確實要強一點!
但是現實中有幾個能超過一億的啊,而且真的超過一億,我想排序也不會只用這乙個方法了!!
其實說實話,我覺得阮一峰版的,比較適合初學者,在沒有大資料處理的時候,完全可以使用,當然!具體使用那個還是要看你的選擇。
好了,分享就到這啦,感興趣的小夥伴可以自己試一試,畢竟這裡只是我測試的資料,你們也可以留下自己的資料,用來對比一下,畢竟不同的電腦,配置,測出來的資料是不一樣的!!
JS快速排序
從這裡看到的,修改了下,跳出左右側搜尋時不需要判斷等於基準值的情況,其次 當排序完有一側只有0或者1個數字時則該側不再進行排序 不判斷也可以,因為此時start等於end,進行排序時,會直接跳出迴圈,但是仍會列印排序後的陣列,就會有重複,影響判斷排序次數。陣列數值用的是資料結構 c語言版 第二版 嚴...
JS 快速排序
var arr 90,80,79,60,5,4,31,2,9 1 取基準值的下標 index math.floor arr.length 2 2 取基準值 midvalue arr.splice index,1 3 根據基準值分左右 定義兩個子集,接收資料 var left var right 4 ...
快速排序JS
思想 建立兩個陣列left right 取乙個基準值可以陣列中任一元素 下面取了陣列的中間元素並且從陣列中剝離出來 將陣列中的元素與基準值比較 小於基準值的放進左邊 left陣列 大於基準值的放進右邊right陣列 重複 步驟2 3 var arr 3,4,2,6,5,8,9,10,16,13 le...